我收到EXC-BAD-ACCESS类型的错误,我通过分配预先存在的UIImage的值(如下所示)创建一个新的UIImage实例,我试图找出问题所在。有一堆代码要排序,我不知道从哪里开始,所以我不会打扰发布源代码 - 但它可能有助于我调查任何你可以告诉我究竟发生了什么(记忆方面)当我通过分配来创建一个新的UIImage时?
(in the .h)
UIImage* myExistsImage;
...
@property (retain) UIImage* myExistsImage;
...
-(UIImage*)rotateImage:(UIImage*)imageToRotate;
----------------------------------------------------
(in the .m)
@synthesize myExistsImage;
...
UIImage* myNewImage = [self rotateImage:myExistsImage];
...
-(UIImage*)rotateImage:(UIImage*)imageToRotate
{
UIImage* rotatedImage = imageToRotate;
//Rotate Image Here (details omitted)...
return rotatedImage;
}
答案 0 :(得分:2)
UIImage* rotatedImage = imageToRotate;
在那一行中,你没有创建一个新的UIImage对象;你只是创建一个指向旧指针的新指针。如果Rotate Image Here
暗示对rotatedImage
进行就地修改,那么您实际上也在修改myExistsImage
。
如果要创建一个新的UIImage对象来保存旋转的对象,则需要使用UIImage alloc
和init
方法明确地这样做。
答案 1 :(得分:2)
代码如下:
UIImage* src;
UIImage* dst = src;
...你所做的只是复制一个指针。为了确保dst
和src
能够指向有效的UIImage
,您需要在retain
上拨打UIImage
两次 - 一次适用于src
,适用于dst
。如果您不再需要指针,则应在release
上调用UIImage
- 当所有指针消失后,对release
的最后一次调用将取消分配UIImage
。您所看到的是UIImage
正在释放,而您仍然对使用它感兴趣;然后,你需要retain
来阻止它发生。