4

嗨,我正在处理内存泄漏,但我无法弄清楚它是什么问题(我对仪器没有太多经验,所以如果我问一些明显的问题,请原谅)。

基本上,我的类中有两个字符串作为属性,第一个将显示给用户的字符串在主队列中检索,而不需要立即在后台队列中检索的字符串:

@property (nonatomic, strong) NSString *stringDefaultLocationAddress;
@property (nonatomic, strong) NSString *stringCurrentLocationAddress;

-(void)viewDidLoad{
  ...
           dispatch_async(idQueue, ^(void) {
            [self recuperaDireccionActualEnBackground:currentUserLocation.coordinate];
         });

}

- (void)dealloc{
    [self removeObserver:self forKeyPath:@"playerProfileNeedsUpdate"];
    self.stringCurrentLocationAddress = nil;
    self.stringDefaultLocationAddress = nil;
}

但是我在仪器中发现了这种泄漏: 代码泄露 在此处输入图像描述

问题与 stringWithFormat 中的占位符 @" %@..." 有关,因为如果我只是将 @"Test" 放在那一点,泄漏就消失了,但我不知道为什么会泄漏这个,我想去理解它。

提前致谢。

4

1 回答 1

3

Instruments 会告诉您分配泄漏对象的位置,但可能不是泄漏对象的位置。您需要查看对象的保留和释放历史记录(单击其地址旁边圆圈中的向右箭头)。您必须手动分析每个保留,将每个保留与逻辑上对应的版本相关联,直到找到不平衡的保留。

如果您在整个代码中使用 ARC,我怀疑您滥用了__bridge_retainedCFBridgingRetain(). 或者,也许您已经对 a 进行了适当的桥接,CFStringRef但之后未能正确地进行手动引用计数。

绝对使用静态分析器构建并努力消除它引发的所有问题(或至少向自己确认它们是误报)。

于 2013-05-27T23:35:38.147 回答