释放 NSInitationOperation 会导致应用程序崩溃

发布于 2024-10-13 10:06:13 字数 735 浏览 5 评论 0原文

我有以下代码

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 负责保留对象。我是否做错了什么或没有意识到。

Hi I have the following code

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];

when I uncomment [operation release] my app crashes. And I get this error :

malloc: * error for object 0x726ed50: pointer being freed was not allocated
*
set a breakpoint in malloc_error_break to debug

I was of view that NSOperationQueue takes care of retaining objects. is there something I am doing wrong or not aware of.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那小子欠揍 2024-10-20 10:06:13

使用 Instruments 的 Zombies 模板进行调试。当您在对象应该已释放的情况下向其发送消息时,时间线中会出现一个标志;您可以单击该标志中的按钮开始调查不当释放该对象的原因。

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

Use Instruments's Zombies template to debug this. A flag will appear in the timeline when you send an object a message after it should have deallocated; you can click the button in that flag to begin investigating what unduly released the object.

By the way, you don't need to create that string object. The string that constructXMLMessage: returns will last as long as the current autorelease pool, which should be all the time you need to work with it. It won't suddenly die on you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文