XCode 4.5分析工具

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)

这也是我应该做的事情?或者这是错的?

Ric*_*III 7

您正在泄漏self.menuView,因为该属性被指定为retain.当你调用alloc一个对象时,它的保留计数被设置为1.当分配属性时,它会增加到两个,没有平衡调用甚至它.

最简单的解决方法是调用-autorelease,如下:

self.menuView = [[[MenuView alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

通过编辑,是的,表面上的代码似乎是正确的.我真正的问题归结为你为什么还在使用手动引用计数?是的 - 从表面上理解它是一件好事,但苹果几乎已经将它贬低为新的ARC.

  • +1这是正确的答案,应该被接受. (2认同)