我想将nil
分配给一个对象,这是一个ivar,作为参数传递给方法,就像这样。
- (int)trashObjectPassedIn:(Banana* banana) {
banana = nil;
return 42;
}
当然,如果我这样称呼它:[self trashObjectPassedIn:oldBanana];
oldBanana不受影响 - 只分配了本地参数。
我有什么方法可以将nil
分配给原始对象吗?
答案 0 :(得分:2)
我建议找一种替代方法。您的trashObjectPassedIn会将引用传递给banana。你可以这样,但真正的香蕉不会发生任何事情。
如果您希望删除香蕉(并且您正在使用ARC),那么您应该忽略拥有香蕉的属性或成员变量。
答案 1 :(得分:2)
虽然这看起来很奇怪,但有一些(尽管不是很多)合理的理由这样做,你可以通过传递一个指向你的对象指针的指针来做到这一点。这称为按引用传递,其中目标c通常按值传递。您可以在任何接受NSError的方法中看到这在Cocoa中使用,例如save:
中的NSManagedObjectContext
。 This answer有更详细的说明
将方法声明更改为
- (int)trashObjectPassedIn:(Banana **)banana
并通过调用
传递该值int result = [self trashObjectPassedIn:&banana];
然后在方法内部设置值:
*banana = nil;
答案 2 :(得分:2)
假设您正在使用ARC,并且您的实例变量是strong
引用,请执行以下操作:
- (int)trashObjectPassedIn:(Banana *__strong *)banana)
{
*banana = nil;
return 42;
}
这可以防止物体泄漏。请注意,这不适用于weak
引用。如果您不使用ARC,我认为要使其普遍安全地工作会更加困难。
修改:忘记显示如何调用它:[self trashObjectPassedIn:&_myBanana]
其中_myBanana
是您的实例变量。