2011-08-22 8 views
1

私はCocoaプログラムに次のコードを書いています。このコードでは、theListはNSMUtableArrayオブジェクトへのポインタであり、inputは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; 
} 

:それは人々自動解放オブジェクトと 初期化アイバーズを参照するのが一般的です。メソッドが呼び出されると、no-oneは配列 がまだ存在することを保証します。ガベージコレクタをオンにするとメモリ管理 タスクが残ってしまいます。これは後でアレイを使用することを理解しており、 が正しく管理しています。

array = [[NSMutableArray alloc] init]; 

配列が初期化されたコードを、投稿してください:伝統的なメモリ管理規則の下では

は、このようなものを使用します。