首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用imageNamed进行内存分配

使用imageNamed进行内存分配
EN

Stack Overflow用户
提问于 2011-08-24 23:01:49
回答 3查看 423关注 0票数 0

我想显示一些图像,当图像不可用时,我想显示一个默认的图像。当使用分析功能时,我收到关于潜在泄漏的警告。我确实理解当使用imageNamed没有分配内存时,有什么好的解决方法?下面是我的代码的一部分

代码语言:javascript
复制
if (!isMyFileThere){
    image = [UIImage imageNamed:@"default.png"];            
}
else{
    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-24 23:05:01

这是自动发布的

代码语言:javascript
复制
 image = [UIImage imageNamed:@"default.png"];

这不是

代码语言:javascript
复制
image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];

您需要这样做:

代码语言:javascript
复制
image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];

规则是,如果您的方法名称以allocnewcopymuteableCopy开头,则您拥有它,并需要自己释放它,使用releaseautorelease。其他任何东西都不是你的,所以你不能释放它。

如果在对象上调用retain,则必须对其执行相同次数的release (或autorelease) :)

票数 3
EN

Stack Overflow用户

发布于 2011-08-24 23:05:44

你已经做了一个分配,现在你必须释放它,如果你不这样做,这是一个潜在的泄漏。另一个语句是image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];释放的对象。

票数 0
EN

Stack Overflow用户

发布于 2011-08-24 23:12:39

如果您想要保留对象,直到您手动释放它,您应该使用保留,autorelease将对象添加到当前NSAutorelease池中,该池在每次运行循环迭代结束时被排出。如果你试图使用一个释放的对象,你的程序将会崩溃。

在iOS 5.0中,如果您启用了ARC,您将不再需要使用“保留”、“自动释放”或“释放”。这些是由编译器自动添加的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7177700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档