NSString stringwithFormat内存泄漏与ARC

时间:2013-05-27 17:13:12

标签: objective-c memory-leaks

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

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

@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;
}

但是我在仪器中遇到这种泄漏: code leak enter image description here

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

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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

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