2012-05-07 31 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 –