首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我通过赋值创建一个新的UIImage时,幕后会发生什么?

当我通过赋值创建一个新的UIImage时,幕后会发生什么?
EN

Stack Overflow用户
提问于 2009-08-23 13:21:55
回答 2查看 280关注 0票数 0

我正在获取EXC-BAD-ACCESS类型的错误,通过分配一个预先存在的UIImage (如下所示)的值来创建一个新的UIImage实例,并且我正在试图找出问题所在。有一堆代码需要整理,我不知道从哪里开始,所以我不会费心发布源代码--但这可能有助于我调查你们中的任何一个,当我通过从另一个中赋值来创建一个新的UIImage时,它可能会告诉我到底发生了什么(从内存上来说)。

代码语言:javascript
复制
(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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-23 14:10:57

代码语言:javascript
复制
UIImage* rotatedImage = imageToRotate;

在这一行中,您不是创建一个新的UIImage对象,而是简单地创建一个指向旧对象的新指针。如果Rotate Image Here意味着对rotatedImage进行就地修改,那么您实际上也在修改myExistsImage .

如果您想要创建一个新的UIImage对象来保存已旋转的对象,则需要使用UIImage allocinit方法显式地这样做。

票数 2
EN

Stack Overflow用户

发布于 2009-08-23 14:45:15

代码如下:

代码语言:javascript
复制
UIImage* src;
UIImage* dst = src;

..。你所做的只是复制一个指针。为了确保dstsrc将继续指向有效的UIImage,您需要在UIImage上调用retain两次--一次用于src,一次用于dst。当您不再需要指针时,应该在release上调用UIImage- -当所有指针都离开时,对release的最后一次调用将释放UIImage。您看到的是,UIImage是在您仍然对使用它感兴趣的时候发布的;因此,您需要对它进行retain,以防止这种情况发生。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1318538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档