释放通过imageNamed加载的保留UIImage属性?

Alv*_*par 7 iphone release uiimage retain

在我的类对象中,我已经定义了一个(nonatomic, retain)属性UIImage.我为此属性分配了一个通过加载的图像

[UIImage imageNamed:@"file.png"];
Run Code Online (Sandbox Code Playgroud)

如果在某些时候我想将此属性重新分配给另一个图像,我是否必须释放先前的参考?

我很困惑,因为通过retain属性我知道我应该释放它.但因为imageNamed:是一种方便的方法(不使用alloc),我不知道在这里应用什么规则.

感谢您的见解!

小智 6

正确,弗罗林......但根据上面的讨论,如果一个人使用一个setter来获得属性(通过合成或手动)进行"保留",那么就不需要额外的保留.

换句话说,以下是正确的(并且没有内存泄漏),恕我直言,我是对的吗?我认为这是问题的初衷......我也想确定.;-) 谢谢!

@interface MyClass {
    UIImage *myImage;
}
@property (nonatomic, retain) UIImage *myImage;
@end

@implementation MyClass
@synthesize myImage;

- (void) someMethod {

    self.myImage = [UIImage imageNamed:@"foo.png"];
}

- (void) someOtherMethod {

    self.myImage = [UIImage imageNamed:@"bar.png"];
}

- (void) dealloc {

    self.myImage = nil;
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)


zap*_*aph 2

图像将根据命名规则自动发布返回给您。通过 setter 将其分配给具有保留属性的属性将保留它。通过 setter 将另一个图像分配给属性将释放旧图像并保留新图像。