[self.xxx release]和[xxx release]的差别
吴正祥
2023-12-01
看不出[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方法