Iphone @property setter中存在漏洞

Iphone @property setter中存在漏洞,iphone,objective-c,ios,memory-management,memory-leaks,Iphone,Objective C,Ios,Memory Management,Memory Leaks,我有一个自定义UIView,我在整个应用程序的多个位置添加它作为子视图。我通过设置一个属性向视图发送一个NSMutable数组,它显示一个注释图。除了我的应用程序中的一个视图外,这一切都很好。我在包含图形的每个视图的viewDidLoad部分使用此代码 endNoteDisplay =[[NoteDisplay alloc] initWithFrame:CGRectMake(0,0,320,180)]; endNoteDisplay.tag = 100; endNoteDisplay.backg

我有一个自定义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行一切正常无泄漏

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

  • 我的应用程序按预期运行,这是唯一的漏洞

有人能告诉我为什么这会产生泄漏吗?my
NoteDisplay
中的
noteSpread
属性设置为
非原子保留

您可以使用以下合并语句:

endNoteDisplay.noteSpread = [NSMutableArray arrayWithObjects: @"C", @"E", @"G", @"A",nil];
这将消除这两条线

NSMutableArray *tmpNts = [[NSMutableArray alloc] initWithObjects: @"C", @"E", @"G", @"A",nil];
endNoteDisplay.noteSpread = tmpNts;
并将清除泄漏:


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

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

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

+1我同意这个答案。上面的代码看起来不错。如果NoteDisplay类的noteSpread属性/变量泄漏,请确保在
NoteDisplay
的dealloc中释放
noteSpread
。这完全解决了问题!我没有在NoteDisplay类中发布支持noteSpread的ivar。不知道为什么我在其他地方使用它时泄漏没有显示出来,但是,这解决了我的问题!可能重复的