在Cocoa Fundametals中,我找到了以下代码:
@interface ValidatingArray : NSMutableArray {
NSMutableArray *embeddedArray;
}
@end
@implementation ValidatingArray
- init {
self = [super init];
if (self) {
embeddedArray = [[NSMutableArray allocWithZone:[self zone]] init];
return self;
}
@end
但我不明白这行代码:
embeddedArray = [[NSMutableArray allocWithZone:[self zone]] init];
为什么我们使用这个初始化而不是简单的内存分配:
embeddedArray = [[NSMutableArray alloc] init];
答案 0 :(得分:3)
Cocoa中的内存区域用于将相关对象放在内存中非常接近,以尝试减少将对象及其使用的内容放在交换之外所需的页面错误数。在-init
中初始化的对象可能是使用+allocWithZone:
在自定义区域中创建的,因此-init
会尝试将其ivar对象放入同一区域以表示区域的含义。< / p>
在实践中,这是针对极少出现的案件进行辩护。我记得看到在OpenStep中使用自定义区域的代码,但我自己从未需要使用区域。