2013-02-17 80 views
0

我有一個來自UIDeviceRGBColor的泄漏。責任框架是+ [UIColor allocWithZone:]。我沒有使用ARC。Xcode儀器泄漏來自UIDeviceRGBColor

泄漏來自下面的方法。

- (void) lAction 
{ 
MKCoordinateRegion mapRegion; 
mapRegion.center = mapView.userLocation.coordinate; 
mapRegion.span.latitudeDelta = 0.05; 
mapRegion.span.longitudeDelta = 0.05; 

[mapView setRegion:mapRegion animated: YES]; 

SettingsViewController *settingsViewController = [[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil]; 

泄漏從這個下一行來:

[self presentModalViewController: settingsViewController animated:YES]; 

然後,該方法完成這樣的:

self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:40.0/255.0 
green:43.0/255.0 blue:46.0/255.0 alpha:1.0]; 
} 

任何人都知道如何解決這一問題?謝謝你們!

+2

如果您只是在發佈問題之間等待8分鐘,那麼您應該嘗試在發佈之前自己找到更好的答案。 – 2013-02-17 04:45:54

+0

非常感謝 - 試圖潛入記憶管理星雲。經過了大約一千次的討論,並且正在從專家那裏收集更多的知識。 – Brandon 2013-02-17 04:48:47

+0

你可以從我的帖子看到我沒有使用ARC。你會推薦我嘗試轉換我的項目嗎? – Brandon 2013-02-17 04:50:04

回答

0

嘗試:

SettingsViewController *settingsViewController = [[[SettingsViewController alloc] 
initWithNibName:@"SettingsViewController" bundle:nil] autorelease]; 

爲了滿足評議,解釋很簡單,如果你不使用ARC,只要您撥打alloc,將保留設置爲1返回的對象的數量。你有責任釋放它。一個簡單的方法就是調用autorelease,它會在主運行循環結束時自動釋放它(除非你正在管理自己的autorelease池,但我不會涉足)。你要確保,只要你需要使用一個對象的代碼有什麼保留它,在當你調用

[self presentModalViewController: settingsViewController animated:YES]; 

一個額外保留的呼籲settingViewController這種情況下,讓你不當你的方法完成時,不得不擔心它會被處理。

我發現Objective-C中的內存管理非常簡單,但它確實需要額外的代碼,而且現在每個人都使用ARC。如果您只是對現有代碼庫進行一些小修改,則不需要切換到ARC,但如果您要繼續使用代碼庫一段時間,則切換時間效率更高。這很簡單,因爲Xcode將爲您完成大部分工作。 (請參閱:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html)。

+2

這不是一個答案。請提供解釋如何解決這個問題。否則,這將更適合作爲評論。 – 2013-02-17 04:47:40