2

嗨,我有以下代码

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 负责保留对象。有什么我做错或不知道的事情吗?

4

1 回答 1

3

使用 Instruments 的 Zombies 模板来调试它。当您在对象应该被释放后发送消息时,时间轴中会出现一个标志;您可以单击该标志中的按钮以开始调查是什么过度释放了该对象。

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

于 2011-01-20T15:25:31.800 回答