2010-07-14 35 views
1

我曾经为iPhone像这样声明IBOutlets,可可触摸 - 取消分配IBOutlets

IBOutlet UILabel *myLabel 

我刚刚发现,宣布他们的正确方法是什么样子,

UILabel *myLabel; 
@property(nonatomic,retain) IBOutlet UILabel *myLabel; 

但与第二并且正确的方法是否必须释放-(void)dealloc方法中的每个IBOutlet以避免内存泄漏?

回答

3

总之,他们应该被释放任何方式。在第二种方法中,您所做的只是创建一个getter/setter对,它在适当的时候不处理重新分配。它有一些逻辑知道什么时候在一个对象被替换时正确释放,但是它不能在那里做最后的清理,因为setter仍然以这种方式分配一个新对象。

这样看待:您必须释放您专门分配的对象。如果您的代理商通过代码的过程或通过NIB文件中的实例化数据分配了一个对象,则在某个时刻您负责清理它(除非它来自自动释放便利方法)。

+0

谢谢!非常有帮助 – user377419 2010-07-14 10:39:26

+0

很高兴我能帮到你。我想在上面的答案中纠正一个小问题:当setter被用来替换(或者只是设置)一个值(self.myLabel = newLabel)时,它实际上并没有像我说的那样分配一个新的对象。它增加了newLabel的保留能力(因为你的属性声明中有'retain'部分),所以你必须在dealloc中执行一个版本。 – 2010-07-14 16:07:14