2013-01-17 67 views
0

我构建了一个iPhone应用程序,并注意到XCode中有分析工具。XCode 4.5分析工具

我有这样的代码:

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]; 

View物业:

@property (retain,nonatomic) MenuView * menuView; 

当我对项目我得到这个潜在的泄漏警告一个分析。 我想知道它是否正常,分析只是警告我?或者我在代码中犯了一个错误。


编辑

如果我做一些事情是这样的:

@property (retain, nonatomic) IBOutlet UISlider *progressSlider; 

self.progressSlider = [[[UISlider alloc]initWithFrame:CGRectMake(58, 12, 191, 23)]autorealese]; 
[view addSubview:self.progressSlider]; 

,并在的dealloc:

[progressSlider realese]; 

这就是我要高度重视办呢?或者它错了?

+0

你得到了什么警告? – Rushi

+0

它是否抱怨你保留menuView并永不释放?或者是其他东西? –

+0

从视图或menuView泄漏? –

回答

3

如果保留的属性,你应该在你的dealloc方法向它发送一个释放消息:

- (void)dealloc { 
    [menuView release]; 
    [super dealloc]; 
} 

而且,你的Alloc当你分配menuView物业/初始化。 init方法给你一个保留数。设置属性给你一个保留数为2。你应该有一个匹配的版本号。您的安装程序代码应该是这样的:

MenuView *m = [[MenuView alloc] init]; 
self.menuView = m; 
[m release]; 
+1

不幸的是这里不是问题。虽然是的,属性应该在析构函数中清理,他比这更早泄漏内存。 –

+0

是的,我发现,并在iPhone键盘上慢慢更新我的帖子,因此延迟... – Ant

+0

我编辑我的帖子.. – MTA

7

您正在泄漏self.menuView,因为财产被指定为retain。当您在对象上调用alloc,它的保留计数设置为1。当财产分配,它增加了两个,没有平衡的呼叫到连出来..

最简单的解决方法是-autorelease一个电话,作为这样的:

self.menuView = [[[MenuView alloc] init] autorelease]; 

随着你的编辑,是的,该代码表面上看来似乎是正确的。我真正的问题归结为为什么你仍然使用手动引用计数?是的 - 从表面上理解这件事是一件好事,但苹果几乎不赞成新ARC。

+1

@MTA,你应该听他^^,他毕竟是汤匙男人! –

+1

@ 0x7fffffff我的官方标题是'运行时间事物之王'。 –

+0

对我的答案没有答案我在过去的2个半月里获得5+票:D –