释放NSInvocationOperation会导致应用崩溃

时间:2011-01-20 07:58:54

标签: objective-c cocoa nsoperationqueue nsinvocation

您好我有以下代码

NSString *analyticsStr = [[NSString alloc] initWithString:[self constructXMLMessage:TagObj]];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(sendAnalyticsString:)
                                                                          object:analyticsStr];
[operationQueue addOperation:operation];
[analyticsStr release];
//[operation release];

当我取消注释[操作发布]时,我的应用程序崩溃了。我收到了这个错误:

  

malloc: *对象0x726ed50的错误:未分配被释放的指针   * 在malloc_error_break中设置断点以进行调试

我认为NSOperationQueue负责保留对象。有什么我做错了或不知道。

1 个答案:

答案 0 :(得分:3)

使用Instruments的Zombies模板进行调试。当一个消息应该被解除分配后,它会在时间轴中出现一个标志;您可以单击该标志中的按钮开始调查过度释放对象的内容。

顺便说一句,您不需要创建该字符串对象。 constructXMLMessage:返回的字符串将持续与当前自动释放池一样长,这应该是您需要使用它的所有时间。它不会突然死在你身上。