0

我收到 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;
}
4

2 回答 2

2
UIImage* rotatedImage = imageToRotate;

在该行中,您没有创建新的 UIImage 对象;您只是在创建一个指向旧指针的新指针。如果Rotate Image Here暗示对 进行就地修改rotatedImage,那么您实际上也在修改myExistsImage

如果要创建一个新的 UIImage 对象来保存旋转的对象,则需要使用 UIImageallocinit方法显式地执行此操作。

于 2009-08-23T14:10:57.013 回答
2

使用如下代码:

UIImage* src;
UIImage* dst = src;

...您所做的只是复制一个指针。为了确保dst并且src将继续指向有效UIImage,您需要调用retain两次UIImage- 一次 forsrc和一次 for dst。当您不再需要指针时,您应该调用release-UIImage当所有指针都消失时,最后一次调用release将释放UIImage. 您所看到的是,UIImage当您仍然对使用它感兴趣时,它正在发布;那么,您需retain要这样做,以防止这种情况发生。

于 2009-08-23T14:45:15.867 回答