2011-02-09 75 views
1

我一直在研究一個應用程序,並且我讀的這本書說要把這些語句放到viewDidUnload和dealloc方法中。還有什麼其他信息應該在這裏?我的程序中有按鈕和標籤。我需要爲他們做些什麼嗎?iPhone方法問題(dealloc一個viewDidUnload)

我想要一個高效運行的應用程序。

這裏是我的代碼:

- (void)viewDidUnload { 
     // Release any retained subviews of the main view. 
     // e.g. self.myOutlet = nil; 
     self.doublePicker = nil; 
     self.color = nil; 
     self.choice = nil; 
     [super viewDidUnload]; 
    } 

    - (void)dealloc { 
     [doublePicker release]; 
     [color release]; 
     [choice release]; 
     [super dealloc]; 
    } 

回答

2

您應該只在viewDidUnload中釋放您的IBOutlet和其他UI元素。您在視圖控制器中分配的所有其他數據(以及IBOutlets)應該在dealloc方法中發佈。這是因爲視圖可以在視圖控制器的生命週期內多次加載和卸載。例如,如果視圖不可見,則視圖可以被卸載,但它後面的數據(在視圖控制器中)仍然需要保存在內存中。當視圖及其控制器不再需要時,調用dealloc方法。

0

一般的規則是,你要調用release在任何你allocinit。您在xib中創建的組件不需要被釋放。

+0

我一直以爲你確實必須發佈任何IBOutlet,該屬性被設置爲保留。視圖加載使用KVC來連接IBOutlets並使用屬性(如果可用)。 – Rengers 2011-02-09 20:48:10

1

您發佈的代碼是正確的,但你也應該爲你的店鋪創建屬性,像這樣:在你的.h文件中

@property (nonatomic, retain) UIPickerView *doublePicker; 
@property (nonatomic, retain) UIPickerView *color; 
// ...etc 
在.m文件

@synthesize doublePicker; 
@synthesize color; 
// ...etc 

關於這種技術存在一些爭議(明確保留你的插座並像這樣釋放它們),但它是Apple推薦的技術:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html#//apple_ref/doc/uid/TP40004998-SW2