Iphone 释放NSData会导致异常

Iphone 释放NSData会导致异常,iphone,objective-c,cocoa,cocoa-touch,memory,Iphone,Objective C,Cocoa,Cocoa Touch,Memory,有人能解释一下为什么下面的代码会导致我的应用程序爆炸吗 NSData *myImage = UIImagePNGRepresentation(imageView.image); : [myImage release]; 如果我注释掉“发布”行,应用程序将运行。。。但是几次调用包含这段代码的函数,我就得到了一个崩溃——我猜是由内存泄漏引起的 即使我将函数中的所有内容注释掉,只保留这两行,当发布执行时,应用程序也会崩溃 我敢肯定这一定是个新手“你不知道如何妥善清理你的烂摊子”之类的事情;-)

有人能解释一下为什么下面的代码会导致我的应用程序爆炸吗

NSData *myImage = UIImagePNGRepresentation(imageView.image);
  :
[myImage release];
如果我注释掉“发布”行,应用程序将运行。。。但是几次调用包含这段代码的函数,我就得到了一个崩溃——我猜是由内存泄漏引起的

即使我将函数中的所有内容注释掉,只保留这两行,当发布执行时,应用程序也会崩溃

我敢肯定这一定是个新手“你不知道如何妥善清理你的烂摊子”之类的事情;-)

干杯


Jamie。

查看内存管理,您应该可以在这里找到一些线程,或者您可以查看。我不会在这里讨论所有的规则,但基本问题是myImage是自动删除的,而不是保留的——当您手动调用release时,它不会与retain配对,因此当自动删除尝试在运行循环结束时删除(现在无效)对象时,您的应用程序将崩溃。删除版本将解决问题,但一定要花一些时间了解保留/发布规则,这是需要理解的最重要的事情之一。

您确定您应该调用
release
——MacOS API的一般规则是,转移所有权的方法在名称中有
复制
创建
。我怀疑您得到的是对底层图像表示的引用,而不是副本,在这种情况下,您释放的是属于其他对象的对象。

您不应该释放此对象! 苹果说:“回报价值。”
包含PNG数据的自动释放的数据对象,如果生成数据时出现问题,则为零。”(请参阅)

谢谢-我将进一步阅读该主题-我认为,问题是我对此的基本理解!是的-你是对的。。。我只是再次完成了代码,注释代码并一步一步地运行。。。我不应该把它放出去!谢谢-这帮助我解决了这个问题。对我来说,阅读的时候,我想:(对于方法来说,这些词是“代码> OLC/<代码>,<代码>新< /COD>,和<代码>拷贝<代码>(当然,<>代码>留存< /代码>。当然,你正在考虑核心基础功能。