jmo*_*man 4 memory-leaks memory-management objective-c ios4
当我创建一个我想要分配给属性的变量时,我可以执行以下操作(假设属性为@property (nonatomic,retain) UILabel *myLabel;):
UILabel *temp = [[UILabel alloc] init];
self.myLabel = temp;
[temp release];
Run Code Online (Sandbox Code Playgroud)
在以下场景中temp未使用会发生什么?
self.myLabel = [[UILabel alloc] init];
[myLabel release];
Run Code Online (Sandbox Code Playgroud)
这是假设我想补充一个[myLabel release];在dealloc由于物业.
这是适当的内存管理吗?在第二个例子中myLabel,init行后的保留计数是否为2 ?
第二种可能会起作用,但是不正确.第一行打电话setMyLabel:.这可能恰好设置了一个ivar,它可能没有.它可能会做各种事情(它可能会复制,它可能会将信息存储在其他地方等).你的第二行发布了ivar.如果setter碰巧按照你假设的方式实现,那么你会很幸运,它会起作用.但这不是正确的内存管理.
第一个例子是正确的.您还可以使用自动释放池来简化操作.更好的方法是将代码移动到ARC,这样可以更快,更轻松地解决所有这些问题.