我有一些逻辑可以测试对象是否为零,如何将其设置为nil?
像:
// in some method
if (true){
[self myObj] = [[myObj alloc]init];
} else{
[self myObject] = nil; //??? How to do this with Automatic Ref. Counting
}
// elsewhere
if([self myObj]){
}
答案 0 :(得分:4)
您的代码不正确。
您需要使用属性并为其指定值,例如[self setMyObject:nil];
或[self setMyObj:[[myObj alloc] init]];
。
答案 1 :(得分:3)
你的代码错了。尝试:
self.myObject=nil;
//or
[self setMyObject:nil];
另外,请确保myObject是您班级中的属性,否则使用self将无效。
答案 2 :(得分:2)
[self myObj]
不可分配,因为它不是左值。要解决这个问题,要么引用基础变量,例如: self->myObj
,如果您正在使用属性,请使用[self setMyObj:]
。
答案 3 :(得分:1)
您正在使用getter作为setter。那不行。它应该是
[self setMyObj:[myObj alloc]init]];
并且
[self setMyObj:nil];
假设您已实施了setter。在ARC下,如果你只是访问一个ivar,你真的不需要 - 你可以直接访问它,并且将为你完成引用计数:
myObj = [MyObj alloc] init];
并且
myObj = nil;
将为您设置和删除所有内容。