这个变量应该手动释放吗?
Posted
技术标签:
【中文标题】这个变量应该手动释放吗?【英文标题】:Should this variable release manually? 【发布时间】:2011-05-12 15:04:51 【问题描述】:分配、保留和复制需要释放内存。我的问题是针对以下情况,我保留了 UIImage 属性,但它是由 imagedNamed 的功能自动释放的。我还应该释放以下变量吗?
@property (nonatomic, retain) UIImage *image;
self.image = [UIImage imageNamed:@"image.png"];
谢谢!
【问题讨论】:
我猜你编辑了这个来解决这个问题。现在下面的答案没有意义。这使得其他人很难跟随和学习。你的原始代码是这样的吗?[self image] = [UIImage imageNamed:@"image.png"];
【参考方案1】:
在您的代码中,您不使用您的属性,而是将自动释放的 UIImage 对象直接分配给您的 iVar,因此您需要
保留您的图像(或更好地实际使用属性) - 否则当您退出当前范围时您的图像对象将被销毁,并且以其他方法访问它会导致错误。所以使用:
self.image = [UIImage imageNamed:@"image.png"];
在 dealloc 方法中释放你的图像
【讨论】:
对不起。 self.image 输入错误。【参考方案2】:是的,您必须发布图像,因为您保留了它。
【讨论】:
但他访问的是 ivar,而不是属性。所以不会调用retain。 对。它是一个自动释放对象。您需要担心只释放那些您分配或保留的对象。在您的示例中,如果您说 self.image = [UIImage imageNamed:@"image.png"];然后它被保留,因为它的属性被访问。如果你不像你的例子那样说 self.image,你就没有保留它。 仍然需要执行 self.image = nil 和 [image release]。所有保留的属性都必须在 dealloc 中释放。 @jini:在 dealloc 中不必同时执行self.image = nil
和 [image release]
。第一个将使第二个无关紧要。
是的,但如果你这样做self.image = nil
,那么image
为零。 [nil release]
绝对什么都不做。因此,self.image = nil; [image release];
与 self.image = nil;
完全相同以上是关于这个变量应该手动释放吗?的主要内容,如果未能解决你的问题,请参考以下文章