यह एप्पल के iPhone 'उपयोगिता आवेदन' टेम्पलेट से असंशोधित कोड है:ऑब्जेक्टिव-सी 'स्वयं' का उपयोग कब
- (void)applicationDidFinishLaunching:(UIApplication *)application {
MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
self.mainViewController = aController;
[aController release];
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
[window addSubview:[mainViewController view]];
[window makeKeyAndVisible];
}
जब mainViewController
aController
को सौंपा गया है, self
कीवर्ड निर्दिष्ट किया जाता है:
self.mainViewController = aController;
हालांकि, जब mainViewController
के फ्रेम सेट किया गया है, self
कीवर्ड की आवश्यकता नहीं है:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
अगर मैं पहला उदाहरण से self
कीवर्ड निकालने, कार्यक्रम संदेश के साथ दुर्घटनाओं:
objc[1296]: FREED(id): message view sent to freed object=0x3b122d0
मैं दूसरे उदाहरण के लिए self
कीवर्ड जोड़ते हैं, कार्यक्रम ठीक चलाता है।
क्या कोई बता सकता है कि पहले मामले में self
क्यों आवश्यक है, लेकिन दूसरा नहीं? मुझे लगता है कि दोनों मामलों में mainViewController
एक ही आवृत्ति चर का जिक्र कर रहा है।
इस प्रश्न का उत्तर पढ़ें: http://stackoverflow.com/questions/2302891/self-instance-var-performance-hit – Felixyz