0

我正在使用仪器泄漏工具来检查代码中的泄漏。

//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];

在使用 Instrument 中的泄漏工具检查后,我被告知泄漏发生在以下代码中:

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

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

4

2 回答 2

4

Instruments 显示您分配了泄漏的对象,而不是泄漏的位置。

你需要找到额外的retain。你可以使用 Instruments 来做到这一点;分配工具可以配置为跟踪保留/释放事件。

这可能会有所帮助

于 2012-05-07T06:28:06.000 回答
1

您是否为 marrProperty 实现了自定义设置器?这可能是内存问题的根源。

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

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

于 2012-05-07T06:21:32.270 回答