ARC内存泄漏

Spi*_*oxa 12 xcode ios automatic-ref-counting

我在配置为使用ARC的项目中遇到与NSMutableArray链接的内存泄漏,我认为应该为您处理这些事情.

以下代码触发NSNumbers的泄漏:

NSMutableArray *myArray = [[NSMutableArray alloc] init];

NSNumber  *myNumber = [NSNumber numberWithFloat:10];

[myArray addObject:myNumber];
Run Code Online (Sandbox Code Playgroud)

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

objc [1106]:类__NSCFNumber的对象0x765ffe0自动释放,没有池到位 - 只是泄漏 - 在objc_autoreleaseNoPool()中断以调试

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

我做错了什么吗?

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

非常感谢您的帮助.

BJ *_*mer 39

您可能在后台线程上运行此代码,并且没有自动释放池.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.
    }
}
Run Code Online (Sandbox Code Playgroud)