我一直在审查苹果文档和示例代码,试图确定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];
}
现在,这些属性不应该设置为assign吗?因为当设置为retain时,IBOutlet的保留计数将增加两次:一次是在nib加载时,另一次是在设置属性时。并且在dealloc中将这些属性设置为nil而不是释放是否更好呢?
IBOutlet
后将其设置为null呢?把这两个调用分开成两个方法不会让你面临潜在的问题吗? - FreeAsInBeerself.myOutlet = nil
(这样就可以释放+nil),并在dealloc中使用[myOutlet release],myOutlet = nil;
。但那只是一种习惯。 - Jilouc