Objective c 释放NSInvocationOperation会导致应用程序崩溃

Objective c 释放NSInvocationOperation会导致应用程序崩溃,objective-c,cocoa,nsoperationqueue,nsinvocation,Objective C,Cocoa,Nsoperationqueue,Nsinvocation,嗨,我有以下代码 NSString *analyticsStr = [[NSString alloc] initWithString:[self constructXMLMessage:TagObj]]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self

嗨,我有以下代码

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];
当我取消注释[operation release]时,我的应用程序崩溃。我得到了这个错误:

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


我认为NSOperationQueue负责保留对象。是否有我做错了或不知道的事情。

使用Instruments的Zombies模板调试此问题。当您在对象应解除分配后向其发送消息时,时间线中将显示一个标志;您可以单击该标志中的按钮,开始调查是什么不适当地释放了对象


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

它会保留你的手术,所以你还有其他问题。当对象完成时,您将如何处理它?任何东西?是的,你是对的,在其他地方可能有问题:“
constructXMLMessage:
返回的字符串将持续与当前自动释放池一样长的时间,这应该是你需要使用它的所有时间”--你的意思是它将持续足够长的时间,以传递给NSInvocationOperation,然后它将保留它,正确的?即使操作将使用保留版本,但在操作运行时,(当前)自动释放池可能已经消失;我错过了。是的,NSInvocationOperation的文档说指定的初始值设定项告诉调用保留其参数,因此即使在池耗尽之后,字符串也应该是安全的,直到操作完成。