我正在获取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;
}发布于 2009-08-23 14:10:57
UIImage* rotatedImage = imageToRotate;在这一行中,您不是创建一个新的UIImage对象,而是简单地创建一个指向旧对象的新指针。如果Rotate Image Here意味着对rotatedImage进行就地修改,那么您实际上也在修改myExistsImage .
如果您想要创建一个新的UIImage对象来保存已旋转的对象,则需要使用UIImage alloc和init方法显式地这样做。
发布于 2009-08-23 14:45:15
代码如下:
UIImage* src;
UIImage* dst = src;..。你所做的只是复制一个指针。为了确保dst和src将继续指向有效的UIImage,您需要在UIImage上调用retain两次--一次用于src,一次用于dst。当您不再需要指针时,应该在release上调用UIImage- -当所有指针都离开时,对release的最后一次调用将释放UIImage。您看到的是,UIImage是在您仍然对使用它感兴趣的时候发布的;因此,您需要对它进行retain,以防止这种情况发生。
https://stackoverflow.com/questions/1318538
复制相似问题