简单分配不使用UIImage * / imageNamed

时间:2009-04-21 06:22:07

标签: iphone cocoa-touch

UIImage* test = [UIImage imageNamed:@"test.png"];
self.image_in_controller = test;

稍后在代码中使用image_in_controller时,我得到EXC_BAD_ACCESS。

我在作业时设定了一个断点。变量测试设置得很好..在分配给selfimage_in_controller之后,测试仍然没问题,但是image_in_controller指向0x0(不是nil)。

如果我在模拟器中运行相同的代码,它工作正常(self.image_in_controller有一个有效的点地址)。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

属性image_in_controller是否为保留属性?如果没有,您将必须使用retain消息明确获取图像的所有权。所以其中一个:

@property(retain) UIImage* image_in_controller;

self.image_in_controller = [test retain];

应该存在。 EXC_BAD_ACCESS通常是由使用已销毁的对象引起的。另外,测试以确保测试实际上不是零。你可以用断言来做到这一点:

NSParameterAssert(test);

在分配测试后。如果UIImage由于某种原因没有在设备上返回有效对象,它会告诉你。

最后,0x0是nil的内存地址,因此您经常会在调试器中看到它(并且可以用于所有意图和目的)与nil,Nil,NULL和0相同。