我一直在審查蘋果文檔和示例代碼,嘗試確定管理IBOutlets內存的最佳方式。至少可以說,我有點困惑。iOS - 管理IBOutlets內存的最佳方法是什麼?
的CurrentAddress樣本代碼聲明IBOutlets作爲屬性:
@interface MapViewController : UIViewController <MKMapViewDelegate, MKReverseGeocoderDelegate>
{
MKMapView *mapView;
UIBarButtonItem *getAddressButton;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *getAddressButton;
大。這些被釋放dealloc:
- (void)dealloc
{
[mapView release];
[getAddressButton release];
[super dealloc];
}
現在不應該將這些屬性設置爲分配?因爲當設置爲保留時,IBOutlet的保留計數將增加兩次:一次是裝入筆尖時,另一次是屬性設置時間?將這些屬性設置爲零而不是釋放dealloc會不會更好?
@Jilouc:你爲什麼不在你的dealloc方法中釋放它們後立即將IBOutlet設置爲null?不把這些調用分成兩種方法會讓你面對潛在的問題? – FreeAsInBeer 2011-03-08 13:38:21
,因爲你可能不是釋放它的人(它可能是在@synthesize裏面釋放),並且viewDidUnload比dealloc更快發生,這會更快地釋放內存 – slf 2011-03-08 13:43:32
我不夠精確(回答編輯)。我也在dealloc中設置了零售店。一般來說,我在viewDidUnload中使用'self.myOutlet = nil'(用於釋放+ nil)和'[myOutlet release],myOutlet = nil;'在'dealloc'中。但這只是一種習慣。 – Jilouc 2011-03-08 13:45:43