कई लोग एक व्यू कंट्रोलर के viewDidUnload
विधि के दौरान कहते हैं कि आपको removeFromSuperview
विधि को कॉल करके सबव्यूव को हटाना होगा।एक दृश्य नियंत्रक के भीतर, viewDidUnload के दौरान subviews पर removeFromSuperview को कॉल करना आवश्यक है?
- (void)viewDidUnload {
[super viewDidUnload];
... snipped ...
[_tableBannerView removeFromSuperview];
TT_RELEASE_SAFELY(_tableBannerView);
[_tableOverlayView removeFromSuperview];
TT_RELEASE_SAFELY(_tableOverlayView);
... snipped ...
}
मैं इस विश्वास के पीछे तर्क समझ में: उदाहरण के लिए, three20 कुछ इस तरह करता है अगर आप loadView
में [self.view addSubview:_aView]
कहते हैं, आप viewDidUnload
में [_aView removeFromSuperview]
फोन करना चाहिए। बात यह है कि यह आवश्यक प्रतीत नहीं होता है। जब एक व्यू कंट्रोलर का दृश्य जारी हो जाता है, तो इसकी डेलोक विधि स्वचालित रूप से इसके सभी सबव्यूज़ जारी करती है।
@interface TestView : UIView
@end
@implementation TestView
- (id)retain {
NSLog(@"view retain");
return [super retain];
}
- (void)release {
NSLog(@"view release");
[super release];
}
- (id)init {
NSLog(@"view init");
return (self = [super init]);
}
- (void)dealloc {
NSLog(@"view dealloc");
[super dealloc];
}
@end
@interface TestViewController : UINavigationController
@end
@implementation TestViewController
- (void)loadView {
NSLog(@"viewController loadView");
[super loadView];
[self.view addSubview:[[TestView new] autorelease]];
}
- (void)viewDidUnload {
NSLog(@"viewController viewDidUnload");
[super viewDidUnload];
}
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"viewDidAppear");
[super viewDidAppear:animated];
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
NSLog(@"viewController dealloc");
[super dealloc];
}
@end
ऊपर कोड निम्नलिखित उत्पादन का उत्पादन:: मेरे परीक्षण कोड जब उनके superview जारी किया जाता है subviews स्वचालित रूप से रिलीज़ हो दिखाई देता है जब दृश्य नियंत्रक के मुख्य दृश्य जारी किया जाता है,
viewController loadView
view init
view retain
view release
viewDidAppear
viewController dealloc
view release
view dealloc
आप देख सकते हैं, इसके सबव्यूज़ भी जारी किए जाते हैं।
इसके अलावा, आईओएस डेवलपर लाइब्रेरी [राज्यों] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101 -SW4 ): "कम-स्मृति स्थिति के मामले में, डिफ़ॉल्ट UIViewController व्यवहार दृश्य संपत्ति में संग्रहीत दृश्य ऑब्जेक्ट को रिलीज़ करना है यदि उस दृश्य का वर्तमान में उपयोग नहीं किया जा रहा है।" इसके अलावा: "यदि आप अपने दृश्य के संदर्भ को संग्रहीत करने के लिए घोषित संपत्ति का उपयोग करते हैं, और वह प्रॉपर्टी उपयोग सेमेन्टिक्स को बनाए रखती है, तो इसे शून्य मान निर्दिष्ट करने के लिए पर्याप्त है।"
इसलिए, यदि कोई दृश्य जारी करना स्वचालित रूप से अपना सबव्यू जारी करता है, तो removeFromSuperview
को viewDidUnload
के दौरान कॉल करना वास्तव में आवश्यक है?
क्या आपके पास इसका वर्णन करने के लिए कोई उदाहरण कोड है? चूंकि आपने XIB का उल्लेख किया है, इसलिए जिथूब पर प्रोजेक्ट डालने से और भी मददगार होगा। धन्यवाद। –