Objective c NSMutableArray的子类化

Objective c NSMutableArray的子类化,objective-c,cocoa,Objective C,Cocoa,在Cocoa Fundametals中,我发现了以下代码: @interface ValidatingArray : NSMutableArray { NSMutableArray *embeddedArray; } @end @implementation ValidatingArray - init { self = [super init]; if (self) { embeddedArray = [[NSMutableArray allocWithZone:[self

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

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


实际上,这是针对很少出现的案件进行辩护。我记得在OpenStep中看到过使用自定义区域的代码,但我自己从来都不需要使用区域。

区域实际上已被弃用,应该完全忽略。@bbum:这种弃用有记录吗?没有。你仍然可以使用分区来存放物品,但用途是有限的。与基础混合区和尝试进行批量分配(大部分区域点)是一个灾难的配方。在苹果的声明中,“你不能使用内存区,不需要再使用NSCORE了,它们被现代Objy-C运行时忽略了。”