我正在Objective-C中实现一个应用程序,并开始分析它。看起来我对某些图片有些问题。例如,我写道:
Example = [[UIImageView alloc] initWithFrame:CGRectMake(15, 70, 290, 98.5)];
UIImage * ImageExample = [UIImage imageNamed:@"Test.png"];
Example.image = ImageExample;
[ImageExample release];
[Menu addSubview:Example];
[Example release];
它给了我:
调用者
此时不拥有的对象的引用计数的不正确递减
我找到了一些例子,NSString
使其成为本地的,并在使用后发布。
请问这类代码有什么问题吗?
答案 0 :(得分:4)
UIImage * ImageExample = [UIImage imageNamed:@"Test.png"];
给出autorelease对象,你不能释放它,因为你没有分配(拥有)它。
答案 1 :(得分:0)
您没有ImageExample。所以你不应该发布它。看一下本指南: iOS Memory Management Programming Guide 特别是关于“基本内存管理规则”的文章。
答案 2 :(得分:0)
删除以下声明,它应该可以正常工作。
[ImageExample release];
答案 3 :(得分:-1)
编辑:
您应该只发布自己拥有的对象。
您只释放已为其分配内存的对象。因此,拇指规则是 - 只有在使用了init时才使用release。 击>
另外,从iOS5开始? Apple给了我们一个名为ARC(自动参考计数)的东西。只需确保在创建项目时勾选复选框。使用ARC,您根本不必使用发布声明。编译器将为您完成工作。
虽然ARC简化了很多事情,但你也可以犯错误。如果您对目标C中的编码感到满意,我建议您阅读ARC。请查看与ARC相关的WWDC会话视频。