我将 ivar (NSMutableArray) 传递给某个方法。我期待如果我在函数内部修改对象,它会反映在函数外部,但是在这种情况下我需要设置对象;类似于以下内容:
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
imAnIvar = [response objects];
//Some other stuff
}
但是我注意到,当我设置它时,函数内部imAnIvar的内存引用会发生变化,并且鉴于此,实际的 ivar 不会改变。我知道问题在于我正在更改方法内对象的引用,因此它停止指向 ivar,然后指向其他一些随机内存方向。
我想到了一个解决这个问题的方法,它可以是在调用函数之前确保 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
}
所以我的问题是:有没有办法强制局部范围变量指向原始变量,即使我正在设置它?如果没有,有没有更清洁的方法来完成这项工作?