NSMutableArray的子​​类化

时间:2010-10-24 13:50:23

标签: objective-c cocoa

在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];

1 个答案:

答案 0 :(得分:3)

Cocoa中的内存区域用于将相关对象放在内存中非常接近,以尝试减少将对象及其使用的内容放在交换之外所需的页面错误数。在-init中初始化的对象可能是使用+allocWithZone:在自定义区域中创建的,因此-init会尝试将其ivar对象放入同一区域以表示区域的含义。< / p>

在实践中,这是针对极少出现的案件进行辩护。我记得看到在OpenStep中使用自定义区域的代码,但我自己从未需要使用区域。