基于对 this question 的一些回答看起来 +alloc 做了一些幕后魔术来为 Objective-C 中的对象实例分配内存。是否需要覆盖 +alloc?
最佳答案
这种情况很少见。
NSString 是一个重写 +alloc 作为实现细节的类的例子。如果你要检查,你会发现 +[NSString alloc] 返回类 NSPlaceholderString 的东西。这是字符串 class cluster 实现的一部分.
您也可以重写以从不同的分配 NSZone 分配为默认值。或者,您可以玩一些小把戏,比如调用 NSAllocateObject为 extraBytes
设置非零值,以便在您的 ivar 之后提供动态的空间量。例如,您可能认为您通常最终得到的 NSString 的私有(private)子类看起来像这样:
@interface {
NSUInteger length;
unichar *data;
}
但事实并非如此。它是包含长度和字符数据的单个内存块。不同的 NSString 实例是不同大小的内存块。这是您可以通过直接调用 NSAllocateObject 来安排的事情。
但所有这些都是技巧和窍门。如果您覆盖 +alloc,就会发生一些特别的事情。
关于objective-c - 在 Objective-C 中是否需要一个类来覆盖 +alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371390/