2011-07-07 56 views
0

有一個小問題,此代碼:問題的一個潛在的泄漏

UITableViewCell *cell = (UITableViewCell *)[[button superview] superview]; 
[button setBackgroundImage: [UIImage imageNamed:@"blueButton.png"] forState:UIControlStateNormal]; 

VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter]autorelease]; 
UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:content]; 
aPopover.delegate = self; 
aPopover.popoverContentSize = CGSizeMake(500,[self filesFromFolderWithChapter:button.chapter] * 60); 

VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter]autorelease]; 

總是讓我潛在的泄漏。
autorelease我收到aPopover「對象發送過多次autorelease」。
當我使用[content release] Xcode告訴我,我不擁有這個對象。
沒有發佈它說「潛在的泄漏」。

不知道還有什麼我可以嘗試解決這個...

回答

1

這樣做。

VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter] retain]; 
UIPopoverController* aPopover = [[UIPopoverController alloc] 
           initWithContentViewController:content]; 
aPopover.delegate = self; 
aPopover.popoverContentSize = CGSizeMake(500,[self filesFromFolderWithChapter:button.chapter] * 60); 
[content release]; 
+0

爲什麼在初始化時發送'retain'消息?保留計數應該是2 ...並且'aPopover'也應該保留它。我認爲沒有'autorelease'消息和一個最終'發佈'應該沒問題。 – 2011-07-07 10:20:42

+0

雅文斯,你是對的......但我們不知道代碼中究竟發生了什麼。由於madmax提到,「當我使用[內容發佈]時,Xcode告訴我,我不擁有這個對象,爲了取得對象的所有權,我建議保留這個。 – Ilanchezhian

+0

好吧,我用保留,但現在它說aPopover是一個潛在的泄漏。 ;-)不要明白,因爲我釋放它。 – madmax

0

您可以嘗試初始化您content對象不發送最後autorelease消息。 然後做你想做的事情,當你不再需要它時,最後發送一個release消息。 根本不應該有任何泄漏。

+0

然後Xcode告訴我,我不擁有這個對象。 – madmax

+0

由於您在顯示的代碼中聲明並初始化此對象,這怎麼可能? – 2011-07-07 11:46:10

+0

我也不明白。 – madmax

0

你已經證明不應泄露或overrelease代碼(除了泄漏aPopover,但我猜你正在處理,在代碼這裏沒有顯示)。

您可能會在VersionsPopoverinit...viewWill...viewDid...方法中進一步釋放對象。

+0

是的,我發佈了一個便利貼。 – madmax

+0

'VersionsPopover'中的方法如何?你是否在那裏放過任何東西? –

+0

不,我只是釋放一個實例變量,並沒有保留任何東西。 – madmax