Rob*_*nes 5 memory-management objective-c
根据这个问题的一些答案,似乎+ alloc在Objective-C中为一个对象的实例分配内存做了一些幕后魔术.是否需要覆盖+ alloc?
这很罕见.
NSString是一个覆盖+ alloc作为实现细节的类的示例.如果你要检查,你会发现+ [NSString alloc]返回NSPlaceholderString类.这是字符串类集群实现的一部分.
你也可以覆盖从不同的分配中分配NSZone是默认的.或者,您可以使用非零值调用NSAllocateObject等技巧extraBytes来为您的ivars提供动态的空间量.例如,您可能认为通常最终的NSString的私有子类看起来像这样:
@interface {
NSUInteger length;
unichar *data;
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.它是一个包含长度和字符数据的单个内存块.不同的NSString实例是不同大小的内存块.这是您可以通过直接调用NSAllocateObject来安排的事情.
但所有这些都是诡计和黑客行为.如果覆盖+ alloc,则会发生一些特殊情况.