ios – ARC内存泄漏

前端之家收集整理的这篇文章主要介绍了ios – ARC内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个配置为使用ARC的项目中遇到与NSMutableArray相关联的内存泄漏,我认为这应该是为您处理这些事情.

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

  1. NSMutableArray *myArray = [[NSMutableArray alloc] init];
  2.  
  3. NSNumber *myNumber = [NSNumber numberWithFloat:10];
  4.  
  5. [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中,如下所示:

  1. - (void)doSomething {
  2. [self performSelectorInBackground:@selector(backgroundSomething)];
  3. }
  4.  
  5. - (void)backgroundSomething {
  6. @autoreleasepool {
  7. NSLog(@"Here I am in the background,doing something.");
  8. myArray = [[NSMutableArray alloc] init];
  9. // etc.
  10. }
  11. }

猜你在找的iOS相关文章