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)
| 归档时间: |
|
| 查看次数: |
12089 次 |
| 最近记录: |