Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397240
  • 博文数量: 466
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-16 13:59
文章分类

全部博文(466)

文章存档

2015年(466)

我的朋友

分类: C/C++

2015-03-16 14:26:19

原文地址:在Nil上调用方法 作者:linux_wuliqiang

在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) |
给主人留下些什么吧!~~