2011-08-22 74 views
1

我在Cocoa程序中有以下代碼。在這段代碼中,List是一個指向NSMUtableArray對象的指針,輸入是一個NSTextField指針。可可垃圾收集問題

-(IBaction)addItem:(id)sender 
{ 
    NSString *item = [input stringValue]; 
    [theList addObject:item]; 
    . . . 
} 

當程序運行時,該方法被調用時,我上線 [theList addObject:item]訪問衝突。作爲最後的手段,我開啓了垃圾回收功能,代碼無任何問題。我不明白爲什麼它沒有垃圾收集器不起作用。有人可以解釋嗎?謝謝

回答

2

你可能沒有正確初始化你的數組。我們經常會看到人們用自動釋放對象 初始化實例變量:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     array = [NSMutableArray array]; 
    } 
    return self; 
} 

這是行不通的。當你的方法被調用時,沒有人保證數組 仍然存在。打開垃圾回收器將使內存管理 任務與它,它明白你想要使用該陣列後, 管理它正確。

在傳統的內存管理規則,使用這樣的:

array = [[NSMutableArray alloc] init]; 

請發表您的代碼,其中數組初始化。