iPhone:发送到解除分配的实例错误的消息

Nic*_*ard 0 iphone nsstring nsdata

我缩小了这个错误(崩溃我的应用程序):

-[NSConcreteMutableData release]: message sent to deallocated instance 0x6eaed40
Run Code Online (Sandbox Code Playgroud)

到以下代码:

emailData = [kmlDoc dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚为什么会出现这个错误?该行只是将一个非常大的字符串设置为NSData对象.我在dealloc方法中发布了emailData.

这里出了什么问题?

Geo*_*che 9

您需要拥有该对象的所有权:

emailData = [[kmlDoc dataUsingEncoding:NSUTF8StringEncoding] retain];
Run Code Online (Sandbox Code Playgroud)

或使用保留/复制属性:

self.emailData = [kmlDoc dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

请记住,你明确必须采取所有权返回的对象从包含既不方法new,alloc,retaincopy在他们的名字,因为他们返回自动释放的情况下.

看到内存管理指南为多.