在@property setter中泄漏

时间:2011-09-20 17:34:42

标签: iphone objective-c ios memory-management memory-leaks

我有一个自定义UIView,我在整个应用程序的几个地方添加了子视图。我通过设置属性发送视图NSMutable数组,它显示注释图。这适用于我的应用程序中的一个视图除外。我在包含图表的每个视图的viewDidLoad部分中使用此代码。

endNoteDisplay =[[NoteDisplay alloc] initWithFrame:CGRectMake(0,0,320,180)];
endNoteDisplay.tag = 100;
endNoteDisplay.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Note_Bkg.png"]];
NSMutableArray *tmpNts = [[NSMutableArray alloc] initWithObjects: @"C", @"E", @"G", @"A",nil];
endNoteDisplay.noteSpread = tmpNts;
[tmpNts release];
[self.view addSubview:endNoteDisplay];
[endNoteDisplay release];
  • 如果我删除endNoteDisplay.noteSpread = tmpNts;行,一切正常,没有泄漏。

  • 如果我把它留在仪器中显示内存泄漏。当我离开当前视图(我显示注释)并返回上一个视图(它有一个表格,其中包含要显示的不同音符选项的列表)时发生泄漏。

  • 我的应用程序按预期工作,这是唯一即将发生的泄漏。

有谁可以告诉我为什么会产生泄漏?我noteSpread中的NoteDisplay媒体资源设为nonatomic retain

3 个答案:

答案 0 :(得分:3)

NoteDisplay中的-dealloc方法是否释放了noteSpread属性?

答案 1 :(得分:1)

在NoteDisplay的dealloc中,您需要将release发送到支持noteSpread的实例变量。

答案 2 :(得分:-2)

您可以使用此合并声明:

endNoteDisplay.noteSpread = [NSMutableArray arrayWithObjects: @"C", @"E", @"G", @"A",nil];

将消除这两行,

NSMutableArray *tmpNts = [[NSMutableArray alloc] initWithObjects: @"C", @"E", @"G", @"A",nil];
endNoteDisplay.noteSpread = tmpNts;

并且还将删除泄漏:

确保在完成工作后在控制器中释放“noteSpread”。