在Objective-C中,nil对象的作用等同于很多其他语言的NULL指针。不同的地
方在于,在nil上调用方法不会导致程序崩溃或抛出异常。
这种技术被用在很多地方,但是对于我们来讲,最主要的就是我们不用在调用一个
对象的方法之前检查该对象是否为空。如果你调用了一个nil对象的方法并且该方法有
返回值的话,你会得到一个nil返回值。
我们也可以用它来稍微改进一下我们的dealloc方法:
- (void) dealloc
{
self.caption = nil; // 调用 setter 方法, 先释放旧数据,在赋值
self.photographer = nil;
[super dealloc];
}
可以这样做是因为当我们将nil赋值给一个实例变量,设置器(setter)会释放旧对
象并且保留(retain)nil对象。这种做法对于dealloc来说更好一些,因为这样做
避免了让变量指向一个随机的数据,而这个数据又恰好是另外一个对象。
注意,我们在这里使用了
self.语法,这表示我们使用的是setter,它会进行内存管理。
如果我们仅仅是直接设置值,像下面这样,那就会产生内存泄露:
// incorrect. causes a memory leak.
// use self.caption to go through setter
caption = nil; //会产生内存泄露 (直接赋值)
阅读(257) | 评论(0) | 转发(0) |