2013-01-17 90 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 –