2012-05-07 14 views
0

我正在使用仪器泄漏工具来检查代码中的泄漏。NSMutableArray泄漏由仪器寻址的警告

//MyClass.h 
@property (nonatomic, retain) NSMutableArray *marrProperty; 

//MyClass.m 
NSSortDescriptor *createdTime = [[NSSortDescriptor alloc] initWithKey:@"createdTime" ascending:NO selector:@selector(compare:)];    
NSArray *sortedArray = [self.anManagedObj.aRelationships sortedArrayUsingDescriptors:[NSArray arrayWithObject:createdTime]]; 
[createdTime release]; 
NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:sortedArray]; 
self.marrProperty = marr; 
[marr release]; 

与仪器泄漏工具检查后,有人告诉我,泄漏发生在下面的代码:

NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:sortedArray]; 
self.marrProperty = marr; 

我不知道为什么,因为我只是alloc和释放良好。

回答

4

仪器显示您泄漏的对象被分配,而不是泄漏的位置。

您需要找到额外的retain。您可以使用乐器来做到这一点; Allocations仪器可以配置为跟踪保留/释放事件。

This will likely be helpful

+0

嗯,我不知道为什么在所有Heapshot中没有NSMutableArray。 –

+0

可能是因为你只泄漏一个。因此,请点击这一点并查看保留/发布历史记录,以查看额外保留来自何处。 – bbum

+0

跟踪显示:(事件类型,RefCt),(Malloc,1),(Retain,2),(release 1) –

1

您是否为marrProperty实现了自定义setter?这可能是内存问题的来源。

此外,您可能更喜欢使用[[sortedArray mutableCopy] autorelease]而不是initWithArray:后跟release。只是为了代码清晰。

如果您不使用ARC,请确保您在该类的-dealloc中释放marrProperty。

+0

just @systhesize marrProperty –

+0

该问题似乎并未出现在此代码中。你是否在该类的dealloc方法中释放marrProperty?必须在dealloc中释放保留属性。 –

+0

即时通讯使用ARC,所以不需要执行dealloc –