-2

我正在用 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将其设为本地,并在使用后发布。

那么请问这种代码是怎么回事?

4

4 回答 4

4
 UIImage * ImageExample = [UIImage imageNamed:@"Test.png"];

给出自动释放对象,你不能释放它,因为你没有分配(拥有)它。

于 2013-09-06T13:03:20.343 回答
0

您不拥有 ImageExample。所以你不应该释放它。看看这个指南: iOS 内存管理编程指南 ,尤其是文章“基本内存管理规则”。

于 2013-09-06T13:00:52.240 回答
0

删除以下语句,它应该可以正常工作。

[ImageExample release];
于 2013-09-06T13:06:07.587 回答
-1

编辑:

你应该只释放你拥有的对象。

您仅释放已为其分配内存的对象。因此,经验法则是 - 仅当您使用过 init 时才使用 release。

另外,从iOS5开始?Apple 为我们提供了称为 ARC(自动引用计数)的东西。只需确保在创建项目时选中该复选框即可。使用 ARC,您根本不必使用发布声明。编译器将为您完成这项工作。

虽然 ARC 简化了很多事情,但您也可能会犯错误。我建议您在对使用 Objective C 编码感到满意时阅读有关ARC的内容。也可以查看与 ARC 相关的 WWDC 会议视频。

于 2013-09-06T13:09:17.583 回答