ivar (NSMutableArray) をいくつかのメソッドに渡しています。関数内のオブジェクトを変更すると、関数の外に反映されると思っていましたが、この場合はオブジェクトを設定する必要があります。次のようなもの:
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
imAnIvar = [response objects];
//Some other stuff
}
しかし、関数内のimAnIvarのメモリ参照は、設定すると変更されることに気付きました。それを考えると、実際の ivar は変更されません。問題は、メソッド内のオブジェクトの参照を変更しているため、ivar を指すのをやめ、他のランダムなメモリ方向を指すことであることを理解しています。
この問題の解決策の 1 つを考えました。関数を呼び出す前に ivar が nil でないことを確認し、次のようにすることができます。
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
NSMutableArray *data = [response objects];
[arrayForTableView removeAllObjects];
for(id element in data){
[imAnIvar addObject:element];
}
//Some other stuff
}
そのため、直接設定するのではなく、元のオブジェクトを使用します。問題は、これが機能するためには、ivar が nil ではないことを確認する必要があることです。これは、メソッドへの呼び出しごとに次のようなことを行う必要があるため、きれいではないと思います。
if(!_ivar){
//alloc it
}
私の質問は次のとおりです。ローカルスコープ変数を設定していても、元の変数を強制的に指すようにする方法はありますか? そうでない場合、これを機能させるためのよりクリーンな方法はありますか?