0

私は、次のような本 (リンク) を読んでいますitems. これは、次のコードについて言われています。

    // create array
    NSMutableArray *items = [[NSMutableArray alloc] init];  
    
    // add random BNRItems to the array
    for (int i = 0; i < 10; i++) {
        BNRItem *p = [BNRItem randomItem];  
        [items addObject:p];  
    }
    
    // print items in array
    for (BNRItem *item in items) {
        NSLog(@"%@", item);
    }
    


    items = nil;

items = nil基本的に、上記のすべてのオブジェクトを正しく破棄するように設定する方法を簡単に説明します。私の質問は:

  • 私はARCを使用していて、設定していないitems = nilと言います-これは、メモリリークが発生することを意味しますか?

BNRItem の dealloc をオーバーライドしていくつかの情報を出力することでテストしましたitems = nil

4

2 に答える 2

2

いいえ、漏れません。ARC は、範囲外になるとリリース メッセージを実行します。タイミング/シーケンスは、最適化のために特定されたものではありません。技術的には、代わりに autorelease を使用する自由があります。

于 2013-07-16T09:30:39.993 に答える
1

参照を に設定すると、 nilARC に作業が終了したことが通知され、すぐにクリーンアップできるようになります。に設定nilしないからといって、クリーンアップされないというわけではありません。

また、テストのようなローカル変数 (スコープの定義の最後に常にクリーンアップされるため) とインスタンス変数 (nil されていない場合、所有するインスタンスと同じくらい存続できる) の違いにも注意する必要があります。

于 2013-07-16T09:31:52.030 に答える