ios – ARC内存泄漏

ios – ARC内存泄漏,第1张

概述我在一个配置为使用ARC的项目中遇到与NSMutableArray相关联的内存泄漏,我认为这应该是为您处理这些事情. 以下代码触发了NSNumbers的泄漏: NSMutableArray *myArray = [[NSMutableArray alloc] init];NSNumber *myNumber = [NSNumber numberWithFloat:10];[myArray 我在一个配置为使用ARC的项目中遇到与NSMutableArray相关联的内存泄漏,我认为这应该是为您处理这些事情.

以下代码触发了NSNumbers的泄漏:

NSMutableArray *myArray = [[NSMutableArray alloc] init];NSNumber  *myNumber = [NSNumber numberWithfloat:10];[myArray addobject:myNumber];

运行最后一行在调试器中给出以下内容:

objc[1106]: Object 0x765ffe0 of class __NSCFNumber autoreleased with no pool in place – just leaking – break on objc_autoreleasenopool() to deBUG

除此之外,对象似乎被正确添加到可变数组中,

我做的事情明显错了吗?

注意:项目中有一个类无法使用ARC,因此我使用编译器标志-fno-objc-arc将其从ARC中排除.但是,泄漏正在使用ARC的其他类中.不确定是否相关.

非常感谢您的帮助.

解决方法 您可能在后台线程上运行此代码,并且没有自动释放池. ARC仍然会自动为您释放对象,如果您正在调用Apple框架,它们可能仍然是非ARC的,所以它们绝对可以为您自动释放对象.所以你还需要一个自动释放池.

Cocoa在主线程上为您创建一个自动释放池,但对后台线程不做任何事情.如果要在不使用NSOperation或某些东西的情况下将某些东西放在后台线程上,那么您需要将线程包装在@autoreleasepool中,如下所示:

- (voID)doSomething {    [self performSelectorInBackground:@selector(backgroundSomething)];}- (voID)backgroundSomething {    @autoreleasepool {        NSLog(@"Here I am in the background,doing something.");        myArray = [[NSMutableArray alloc] init];        // etc.    }}
总结

以上是内存溢出为你收集整理的ios – ARC内存泄漏全部内容,希望文章能够帮你解决ios – ARC内存泄漏所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1111934.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存