ios – ARC内存泄漏

前端之家收集整理的这篇文章主要介绍了ios – ARC内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个配置为使用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相关文章