我可以在我的方法中使用self = nil吗?

时间:2011-10-10 14:54:23

标签: objective-c

我可以使用

吗?
self = nil 

在实例方法中,这样当方法执行结束时,我可以在主类中使用if语句:

if (myInstance) 

检查是否出现问题?

感谢

3 个答案:

答案 0 :(得分:3)

可以这样做,但没有你想要的效果

考虑您的objc方法的-[NSArray count]签名具有以下C函数签名:

NSUInteger NSArray_count(NSArray * self, SEL _cmd) {
   self = nil; // ok - this is a variable, local to the function (method).
               // now all messages to `self` will do nothing - in this method only.
   ...
}

因为您指定给nil的指针是方法的本地变量,所以它实际上不会影响外部实例。它改变了方法范围内的指针变量。该变量是传递的参数。实际上,这意味着您已将本地参数设置为nil,但世界其他地方不承认此更改。

答案 1 :(得分:0)

您可以在构造函数中返回nil,是的。如果您在调用[super init]后执行此操作,请确保您release返回的对象具有拥有的保留计数。

话虽如此,您可以做的其他事情是遵循Apple使用*NSError继续返回nil,以帮助提供有关您使用代码出错的更多信息。

答案 2 :(得分:0)

你可以从构造函数返回nil,但如果你返回nil,则永远不会释放可能分配的内存!

如果您的对象管理自己的生命周期(以及内存管理),您可以释放它并从特定方法返回nil。 通常这种方法是类方法,因为如果它不涉及用户对该对象的引用,那么释放它是危险的。