现在的位置: 首页 > 综合 > 正文

[self.xxx release]和[xxx release]的差别

2013年07月22日 ⁄ 综合 ⁄ 共 692字 ⁄ 字号 评论关闭


看不出[self.xxx release]和[xxx release]的用法有什么本质的差别。self.xxx多一个步骤:通过getter得到成员变量。而通常情况下,getter也只是直接返回相应的对象。这点楼主自己也说明了。

建议不要在这个问题上太过纠结,遵守常规约定即可。

1. 一般情况下,对于类型是对象的成员变量,如果设置了对应的@property,就用以下这种格式释放:
    1.    self.xxx = nil;
复制代码
只要setter方法正确,这段代码自然能release对象,顺便还能赋nil;

2. 如果没有设置@property,就是直白的方法
    1.    [xxx release];
    2.    xxx = nil;
复制代码
如果是在dealloc方法里,那么赋为nil也可以省了。

看通过Xcode的模版创建的项目,在AppDelegate的dealloc方法中,_window是怎样释放的。

3. 使用@property,可以不定义成员变量。如果定义了,还是建议加前缀和后缀。Apple习惯加前缀“_”。Google的代码约定是后缀“_”。 加后缀好处多多,可以避免局部变量的变量名冲突,也方便自己和别人阅读。

一个对象进入dealloc阶段的时候,他的状态是不稳定的,此时不应该再调用自身的任何方法,在dealloc里调用[self.xxx release]的话,假设[self getXxx]方法依赖一个成员变量Y,而变量Y却已经被释放,那么你的程序就可能crash了;

一般来说,在对象init与dealloc时,处于不稳定状态,应该直接访问变量,而不使用getter和setter方法

抱歉!评论已关闭.