nil用法
Objective-C中nil
nil
nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。
Nil
首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
我们可以通过nil对象让我们的dealloc函数实现看上去更帅一点:
- (void) dealloc
{
self.caption = nil;
self.photographer = nil;
[super dealloc];
}
之所以可以这么做是因为我们给把nil对象设给了一个成员变量,setter就会retain nil对象(当然了这个时候nil对象啥事情也不会做)然后release旧的对象。这个方式来释放对象其实更好,因为这样做的话,成员变量连指向随机数据的机会都没有,而通过别的方式,出现指向随机数据的情形机会不可避免。注意到我们调用的self.VAR这样的语法,这表示我们正在用setter,而且不会引起任何内存问题。
Objective-C中nil
nil
nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。
Nil
首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。
我们可以通过nil对象让我们的dealloc函数实现看上去更帅一点:
- (void) dealloc
{
self.caption = nil;
self.photographer = nil;
[super dealloc];
}
之所以可以这么做是因为我们给把nil对象设给了一个成员变量,setter就会retain nil对象(当然了这个时候nil对象啥事情也不会做)然后release旧的对象。这个方式来释放对象其实更好,因为这样做的话,成员变量连指向随机数据的机会都没有,而通过别的方式,出现指向随机数据的情形机会不可避免。注意到我们调用的self.VAR这样的语法,这表示我们正在用setter,而且不会引起任何内存问题。
在Objective-C中,你来对象在功能上等价于其他很多语言中的NULL指针。区别是可以对nil调用方法,而不致导致程序崩溃或抛出异常。
http://www.cocoachina.com/bbs/simple/?t53644.html