嗨,我正在处理内存泄漏,但我无法弄清楚它是什么问题(我没有太多的乐器经验所以请原谅我,如果我问的是明显的事情)。
基本上我在我的类中有两个字符串作为属性,将在主队列中检索将向用户显示的第一个字符串,并在后台队列中检索不需要的字符串:
@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”放在那一点,泄漏就消失了,但我不知道为什么泄漏这个和我想了解它。
提前致谢。
答案 0 :(得分:3)
仪器会告诉您泄漏对象的分配位置,但可能不是泄漏的位置。您需要查看对象的保留和释放历史记录(单击其地址旁边的圆圈中的向右箭头)。您必须手动分析每个保留,将每个保留与逻辑上相应的版本相关联,直到找到不平衡的保留。
如果您在整个代码中使用ARC,我怀疑您误用了__bridge_retained
或CFBridgingRetain()
。或者你可能已经对CFStringRef
进行了适当的桥接,但之后未能正确地进行手动引用计数。
绝对使用静态分析器构建并努力消除它引发的所有问题(或者至少向自己确认它们是误报)。