假设我有一个类被声明为:
@class SomeClass @interface SomeClass: NSObject { NSString *myString; NSString *yourString; } @end
后来,在其他一些代码中我说:
SomeClass *myClass = [[SomeClass alloc] init];
SomeClass如何知道要分配多少内存,因为它没有覆盖alloc?大概需要ivars myString和yourString的存储,但是它使用从NSObject继承的alloc.是否有参考资料涵盖这些细节?
解决方法
@H_404_13@ alloc只是一个类方法,就像其他的一样. NSObject中的默认实现使用class_getInstanceSize()来获取应该分配的实例大小.实例大小基于每类(无继承)编译时结构大小和类的总大小以及所有超类的每次运行时计算的组合确定.这是64位和iPhone运行时非易失的iVAR的可能性.一些类,特别是类集群,直到初始化程序被调用才真正实现真正的实例分配(这就是为什么在初始化程序方法中做self = [super init]很重要的原因).