MTA*_*MTA 0 memory-leaks objective-c ios
我构建了一个iPhone应用程序并注意到XCode中有Analyze工具.
我有这个代码:
View * view = [[View alloc]initWithFrame:self.view.frame title:currentItem.name id:currentItem.idStr];
self.menuView = [[MenuView alloc]init];
self.menuView.contentView = view;
[view release];
Run Code Online (Sandbox Code Playgroud)
和View财产:
@property (retain,nonatomic) MenuView * menuView;
Run Code Online (Sandbox Code Playgroud)
当我对项目进行分析时,我得到了这个潜在的泄漏警告.我想知道它是否正常,分析只是警告我?或者我犯了错误的代码.
编辑
如果我做这样的事情:
@property (retain, nonatomic) IBOutlet UISlider *progressSlider;
Run Code Online (Sandbox Code Playgroud)
.
self.progressSlider = [[[UISlider alloc]initWithFrame:CGRectMake(58, 12, 191, 23)]autorealese];
[view addSubview:self.progressSlider];
Run Code Online (Sandbox Code Playgroud)
在dealloc中:
[progressSlider realese];
Run Code Online (Sandbox Code Playgroud)
这也是我应该做的事情?或者这是错的?
您正在泄漏self.menuView,因为该属性被指定为retain.当你调用alloc一个对象时,它的保留计数被设置为1.当分配属性时,它会增加到两个,没有平衡调用甚至它.
最简单的解决方法是调用-autorelease,如下:
self.menuView = [[[MenuView alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)
通过编辑,是的,表面上的代码似乎是正确的.我真正的问题归结为你为什么还在使用手动引用计数?是的 - 从表面上理解它是一件好事,但苹果几乎已经将它贬低为新的ARC.