iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 断点指向“objc_autoreleaseNoPool”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

所以我正在调试应用程序在其应用程序发布,并启用了一个通用断点为“所有异常”。从那以后,每次运行应用程序,控制台打印: Catchpoint 2 (throw)Pending breakpoint 1 – “objc_exception_throw” resolved objc[11765]: Object 0x8f18ff0 of class __NSCFLocale autoreleased w
所以我正在调试应用程序在其应用程序发布,并启用了一个通用断点为“所有异常”。从那以后,每次运行应用程序,控制台打印:

字面印刷3次。我不知道这是什么意思,但看起来不错。任何建议将不胜感激。@H_673_22@

解决方法

@H_419_32@ 新信息

我确定了我的问题在于创建一个swizzled自动释放方法。@H_673_22@

我不建议这样做,除非你知道你在做什么,但这是我发现的。@H_673_22@

+ (void) load; //Method is called outside the original autorelease pool.
+ (void) initialize; // Method is called outside the original autorelease pool.

NSThread创建自己的线程,被调用方法应该被包装在一个自动释放池中。@H_673_22@

使用“dispatch _…”命令时,Grand Central Dispatch会自动调整自动释放池。但是,当您手动分派时。您可能希望将其包装在自动释放池中。@H_673_22@

此外,ARC不会让您知道自动释放将发生在池外。@H_673_22@

因此,如果您使用ARC并且知道您将在自动释放池之外。并没有什么可以做到这一点。你会想避免所有方便方法。@H_673_22@

用这个。@H_673_22@

[[NSString alloc] initWithFormat:@"%@",myObject];

而不是这个@H_673_22@

[NSString StringWithFormat:@"%@",myObject];

这将允许弧系统保留和释放,但通过方便方法完成的底层自动释放将被跳过,因为您不会使用方便方法。@H_673_22@

希望有帮助。@H_673_22@

原始答案@H_673_22@

好的,我不觉得这个问题回答了足够的细节。@H_673_22@

正在呈现的消息是@H_673_22@

objc[1310]: Object 0x34f720 of class SimpleKeychain autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug

调试器指出一个可能的断点,这将有助于您调试这种情况。现在这个断点真的没有帮助调试的情况。我认为重要的是要知道如何将这个断点添加到调试器中,所以我花费了时间来修补它(在清理互联网之后,找不到任何东西),直到我打破了这个错误。@H_673_22@

这是令人讨厌的,所有错误的突破都没有抓住这一点,但这里是添加断点到调试器的步骤。@H_673_22@

首先要做的是选择调试器的断点导航器@H_673_22@

通过点击此选项卡@H_673_22@

接下来,您将看到导航器窗格的底部,然后按加号按钮@H_673_22@

这将允许您手动添加断点。@H_673_22@

我选择了一个C断点,并在名称文本字段中输入消息名称。@H_673_22@

添加这个异常之后,它确实打破了。@H_673_22@

然而,这可能是或者可能不是您作为客观c开发人员有用的。这突破了汇编代码。@H_673_22@

不幸的是,它只在线程的调用堆栈上显示了这一点。@H_673_22@

事实证明,自动释放问题是因为在dispatch_once调用调用一个自动释放类。进一步调查显示(无效)负荷;上课的方法是在其他任何事情之前被调用的。这通过call_load_methods函数完成,并且在main方法的线程之外。@H_673_22@

为了纠正这一点,我只是在呼叫周围添加自动释放池包装器。@H_673_22@

一个解决方案可能是在(void)加载中添加自动释放池;方法。但这对我的使用是足够的。@H_673_22@

注意:我将此添加到这里的帖子,因为我不喜欢找到一个问题,无法找出所得到的答案的所有路径。如果调试器告诉你添加一个断点给列出的函数,那么应该有一些信息来获取这些信息。希望这将降低一些在那里试图找到这个答案的沮丧。@H_673_22@

大佬总结

以上是大佬教程为你收集整理的objective-c – 断点指向“objc_autoreleaseNoPool”全部内容,希望文章能够帮你解决objective-c – 断点指向“objc_autoreleaseNoPool”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。