我有一个问题,那就是为什么释放刚创建的对象会在应用程序中导致内存访问错误。
我正在创建一组对象并将它们添加到非变量数组中。将它们添加到阵列后,我释放它们。第一次运行该功能时,一切正常。该函数第二次运行时,释放对象将使应用程序崩溃,我不知道为什么。

以下是相关功能的一部分(完整的项目源代码在这里:)

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:echowaves.responseData encoding:NSUTF8StringEncoding];
[echowaves.responseData release];
...more code...
[[echowaves updatedConvos] removeAllObjects];
NSDictionary *dictionary = [responseString JSONValue];
if ( [dictionary count] ) {
for (NSDictionary *subscription in dictionary ) {
UpdatedConvo *convo = [[UpdatedConvo alloc] initWithConvoName:[[subscription objectForKey:@"subscription"] objectForKey:@"convo_name"]
convoURI:[[subscription objectForKey:@"subscription"] objectForKey:@"conversation_id"]
unreadCount:[[[subscription objectForKey:@"subscription"] objectForKey:@"new_messages_count"] integerValue]];
[[echowaves updatedConvos] addObject:convo];
[convo release]; // THIS LINE CAUSES CRASH 2ND TIME THROUGH
}
} else {
...more code....
}
}

应用程序在[convo release]中第二次在函数中崩溃。因为护送对象是在它之前创建的两行,所以我不知道为什么。

我认为UpdatedConvo * convo = [[UpdatedConvo alloc] initWithConvoName ...]调用将创建该对象并将其保留计数设置为1。然后,当我将该对象添加到[echowavesupdatedConvos] NSmutableArray对象中时,应该将保留计数增加1(现在计数为2)。我已经处理了该“临时”护送对象,因此我释放了该对象,其保留计数应该移回1,对吗?
我在这里想念什么?
要使应用程序成功运行,我必须注释[cavo release]行。但是我不知道为什么,我认为这可能会减慢我的内存泄漏,因为新创建的updatedconvo对象没有从内存中正确释放。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-350389-1.html
开炮呀
不客气的说