Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5401393
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: C/C++

2011-03-24 11:57:38

在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;   //会产生内存泄露 (直接赋值)




阅读(1675) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~