2

私は次の方法を持っています:

-(NSMutableArray *)someArray{ // line 1
    if(self.someArray == nil){ // line 2
        self.someArray = [[NSMutableArray alloc]init];
    }  
    return self.someArray;
}

私は非ARCでこれを持っていましたが、うまくいきself.someArrayました.2行目が.の場合はnil、先に進んでインスタンス化してください.

しかし、ARCに切り替えた後、2行目に到達すると1行目に戻り、ループが続きます。

どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

5

適切な形式は

@synthesize someArray = _someArray;
- (NSMutableArray *)someArray {
    if (!_someArray) {
        _someArray = [NSMutableArray array];
    }
    return _someArray;
}
于 2013-02-09T00:57:31.117 に答える
5

self.someArray はゲッターを呼び出すため、無限ループになります。代わりに、そのメソッド内で _someArray を使用します (プロパティによって提供される自動 ivar を使用していると仮定します。それ以外の場合は、バッキング変数が何であれ使用します)。

于 2013-02-09T00:56:20.753 に答える
2

何が起こっているかというと、アクセサー内でアクセサー メソッドを呼び出しているということです。しかし、すべてのアクセサーが自分自身を呼び出す場合、このサイクルを断ち切ることはできません。

これを回避するには、自動合成プロパティを使用します。

-(NSMutableArray *)someArray{ // line 1
    if(_someArray == nil){ // line 2
        _someArray = [[NSMutableArray alloc]init];
    }  
    return _someArray;
}
于 2013-02-09T00:55:57.630 に答える