2010-10-24 39 views
1

在可可Fundametals我發現下面的代碼:子類NSMutableArray的

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

回答

3

Cocoa中的內存區域用於將相關對象置於內存中靠近,嘗試並減少將對象和它使用的事物交換出來所需的頁面錯誤的數量。在-init中初始化的對象可能已使用+allocWithZone:在自定義區域中創建,因此-init會嘗試將其伊娃對象放入同一區域以遵守區域的含義。

實際上這是針對很少出現的案例進行辯護。我記得看到在OpenStep中使用自定義區域的代碼,但從未需要自己使用區域。

+2

區域已被有效棄用,應完全忽略。 – bbum 2010-10-24 17:02:57

+0

@bbum:是否將棄用記錄在案? – 2010-10-24 17:31:49

+0

不是。你仍然可以使用區域的東西,但使用是有限的。與基金會混合區域和試圖進行批量重新分配(大部分區域)是災難的祕訣。 – bbum 2010-10-24 19:25:21