Objective-C中类名的最大长度是多少?

4
< p > Objective-C 中类名的最大长度是多少?我在 Xcode 文档集和谷歌上都没有找到任何提示。< /p > < p > 我正在编写一些运行时辅助工具,如果知道我的类型编码的字符缓冲区足够大就好了。< /p >

字符缓冲区?为什么不使用像NSStringstd::string这样的字符串对象,从而完全避免这个问题呢? - trojanfoe
@trojanfoe 因为我想避免可能不必要的动态内存分配。 - Jonathan Cichon
以牺牲功能为代价? - trojanfoe
@trojanfoe 如果有一个硬限制并且限制很低,那么这对功能不会造成任何成本。 - Jonathan Cichon
你担心的是分配内存所需的时间还是内存消耗量?如果是后者,那么固定大小的缓冲区是一个糟糕的选择。考虑到你将缓冲区长度设置为64个字符,而大多数类名只有8-24个字符,那么每个类浪费了超过40个字节。使用字符串对象几乎完全消耗所需的内存,并且不像使用固定长度缓冲区一样限制类名的长度。 - trojanfoe
@trojanfoe,这更多是在一个大循环中分配内存的时间。通常我会尽量避免在我的核心类中进行不必要的CPU工作,只是为了让代码更加精简。但是似乎类名称没有上限,所以我将使用std::string - Jonathan Cichon
2个回答

3
由于Objective C不是标准化编程语言,所以无法准确回答这个问题。但它取决于编译器的支持。我猜主要的Objective C编译器(Clang/LLVM,GCC)都支持各种长度的类名。要了解详情,您需要查看它们的源代码。但由于它们都是用C++编写的,因此它们可能会利用std:string并且因此与长度无关。
我尝试使用clang/llvm在Xcode中编译一个类名为100,000个字符的项目,结果运行良好。因此,您的缓冲区可能不够大。

谢谢您的回答,我现在会使用 std::string 而不是静态缓冲区。 - Jonathan Cichon

2
我不认为类名有硬性限制,为什么会有呢?
由于 Obj-C 是在 C 之上运行的,因此应遵循它们的标准。C 中的标识符没有最大长度,如在问题 "Max identifier length" 中所指出的。
你很少会遇到超过100个字符的类名,但你可以使用更大的缓冲区来更加安全。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接