我知道声明的属性会生成访问器方法,这在某种程度上只是语法糖。
我发现很多人self.property = nil
在他们的dealloc
方法中使用。
1)在苹果的内存管理文档中,p23 说:
唯一不应该使用访问器方法来设置实例变量的地方是 init 方法和 dealloc。
为什么不应该?
2) 在苹果的Objective-C 2.0中,p74
声明的属性从根本上代替了访问器方法的声明;当你合成一个属性时,编译器只创建任何不存在的访问器方法。与该
dealloc
方法没有直接交互——属性不会自动为您释放。然而,声明的属性确实提供了一种交叉检查方法实现的有用dealloc
方法:您可以在头文件中查找所有属性声明,并确保释放未标记assign
的对象属性,并且assign
未释放标记的对象属性。注意:通常在
dealloc
方法中,您应该release
直接对象实例变量(而不是调用 set 访问器并nil
作为参数传递),如下例所示:
- (void)dealloc { [property release]; [super dealloc]; }
但是,如果您正在使用现代运行时并合成实例变量,则无法直接访问实例变量,因此您必须调用访问器方法:
- (void)dealloc { [self setProperty:nil]; [super dealloc]; }
注释是什么意思?
我发现[property release];
并且[self setProperty:nil];
两者都有效。