我有一个自定义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
。
答案 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”。