在Objective-C中,+ alloc如何知道要分配多少内存?

Rob*_*nes 9 memory-management objective-c

假设我有一个类声明为:

@class SomeClass

@interface SomeClass: NSObject {
  NSString *myString;
  NSString *yourString;
}

@end
Run Code Online (Sandbox Code Playgroud)

后来,在其他一些代码中我说:

SomeClass *myClass = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

SomeClass如何知道要分配多少内存,因为它没有覆盖+ alloc?据推测,它需要存储ivars myString和yourString,但它使用的是继承自NSObject的+ alloc.是否有参考资料涵盖这些细节?

bbu*_*bum 14

+alloc就像任何其他类的方法一样.NSObject中的默认实现class_getInstanceSize()用于获取应分配的实例大小.实例大小是基于每类(没有继承)编译时结构大小和每个运行时计算类和所有超类的总大小的组合来确定的.这就是6​​4位和iPhone运行时非易碎iVars的可能性.

在调用初始化程序之前,某些类(特别是类集群)实际上并不执行真正的实例分配(这就是为什么self = [super init]在初始化程序方法中这很重要).