2011-02-22 25 views
8

कोई व्यक्ति कृपया बता सकता है कि आईओएस एप्लिकेशन में निष्पादन का प्रवाह कैसे बहता है? मुझे पता है कि UIAplicationMain मुख्य से पहले कहा जाता है। फिर क्या? मेरे परिभाषित तरीकों और मुख्य के बीच संबंध क्या है? क्या यह सभी घटना संचालित है या क्या कुछ संरचित अनुक्रम हो सकते हैं?मुख्य में UIAplicationMain के बाद उद्देश्य सी निष्पादन आदेश क्या है?

मेरा मतलब इतना अस्पष्ट नहीं है, मुझे बस यह जानने की जरूरत है कि कहां से शुरू करना है। शायद मैं इसे गलत तरीके से देख रहा हूं।

#include "myMethods.h" 
int main (int argc, char * const argv[]) { 

    Method1(); // Initialization 
    Method2(); // Opening views and options 
    Method3(); // Meat of the program 

    return 0; 
} 

धन्यवाद अग्रिम में:

उदाहरण के लिए, C++ मैं की तरह कुछ करना होगा।

+2

FYI करें, 'UIApplicationMain()' कभी नहीं देता है। ऐप को 'निकास() 'पर कॉल के माध्यम से समाप्त कर दिया जाता है। तो यूआईपीप्लिकेशंसमेन (argc, argv, nil, nil) के बाद आपने जो कुछ भी रखा है, '' मुख्य() 'में * कभी * निष्पादित नहीं होगा। कभी नहीं। –

+1

उह। @ डेव अगर यह सच है, वह वास्तव में मुझे बाहर grosses। यह बेसिक के दिनों की तरह वापस है जब हम सिर्फ एक GOSUB के बीच में बंद करो! –

उत्तर

7

जैसा कि आपने कहा UIApplicationMain प्रणाली में एक आवेदन निष्पादन पैदा करता है। सामान लोडिंग प्रक्रिया में सामानों में से, मुझे लगता है कि आप एक विशिष्ट अनुप्रयोग के लिए प्रासंगिक क्या है में रुचि रखते हैं। इसके अलावा मैं एक ठेठ मामला मानता हूं, जिसे एक्सकोड प्रदान करता है कि कई परियोजना टेम्पलेट्स में सचित्र है।

एप्लिकेशन लोडिंग प्रक्रिया एप्लिकेशन की सूचना संपत्ति सूची में दिखती है। वहां यह 'मुख्य निब फ़ाइल बेस नाम' पाता है, और आपके एप्लिकेशन का यूआईएप्लिकेशन इंस्टेंस एप्लिकेशन बंडल से संबंधित निब फ़ाइल लोड करता है। यह निब फ़ाइल एक प्रतिनिधि प्रतिनिधि वर्ग निर्दिष्ट करती है, और कक्षा के एक उदाहरण को आपके यूआईएप्लिकेशन इंस्टेंस की प्रतिनिधि संपत्ति से कनेक्ट करने के लिए कहती है।

मुख्य निब फ़ाइल के आधार पर, अन्य वस्तुओं बनाया है और साथ ही साथ उदाहरण के लिए जुड़ा हुआ है, हो सकता है, आवेदन की खिड़की, मुख्य दृश्य नियंत्रक, आदि

अब लोड हो रहा है अनुक्रम समाप्त हो जाती है, और सब कुछ सभी घटना है प्रसिद्ध -applicationDidFinishLaunching: संदेश प्राप्त करने के लिए अपने आवेदन प्रतिनिधि वर्ग से शुरू हो रहा है।

2

एप्पल दस्तावेज़ से -

आवेदन जीवन चक्र घटनाओं के अनुक्रम कि प्रक्षेपण और आपके आवेदन की समाप्ति के बीच होता है का गठन किया। आईओएस में, उपयोगकर्ता होम स्क्रीन पर अपना आइकन टैप करके अपना एप्लिकेशन लॉन्च करता है। टैप होने के कुछ ही समय बाद, सिस्टम कुछ मुख्य संक्रमण को प्रदर्शित करके आपके एप्लिकेशन को लॉन्च करने के लिए कुछ संक्रमणकालीन ग्राफिक्स और आय प्रदर्शित करता है। इस बिंदु से, प्रारंभिक कार्य का बड़ा हिस्सा UIKit को सौंप दिया जाता है, जो एप्लिकेशन की मुख्य निब फ़ाइल लोड करता है और ईवेंट लूप को पढ़ता है।

Application Life Cycle

17

तो, जैसा कि आपने बताया है, main()main.m में कार्य प्रारंभ बिंदु है, जो UIApplicationMain() पर कॉल करता है। ,

  • argc,
  • * argv []
  • * principalClassName
  • * delegateClassName: आप डॉक्स चेक करते हैं, तो आप देखेंगे कि UIApplicationMain चार तर्क लेता है।

उनमें से पहले दो तर्क संख्या और परिवर्तनीय सूची main() से उत्तीर्ण की गई हैं। लेकिन तीसरे और चौथे तर्क एनएसएसटींग्स ​​के पॉइंटर्स हैं। तीसरा तर्क निर्दिष्ट करता है कि कौन सा वर्ग UIApplication होना चाहिए। जब तक आप UIApplication उपclassing का इरादा नहीं रखते हैं, तो आप तीसरे तर्क के लिए nil निर्दिष्ट करते हैं।चौथा तर्क निर्दिष्ट करता है कि कौन सी कक्षा यूआईपीप्लिकेशंस के प्रतिनिधि वर्ग होनी चाहिए, जो UIApplicationDelegate प्रोटोकॉल में निर्दिष्ट किसी भी चीज़ का जवाब देगी। तुम्हें पता है, सीधे इस के साथ गंदगी के लिए के रूप में यह Xcode टेम्पलेट्स के सभी में शामिल है की जरूरत नहीं है:

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

मत NSStringFromClass([AppDelegate class])) बिट आप फेंक देते हैं। चौथे तर्क को निर्दिष्ट करने का यह एक शानदार तरीका है ताकि सही प्रतिनिधि को बुलाया जाए, बाद में आपको AppDelegate.m का नाम बदलना चाहिए।

UIApplicationmain event loop शुरू करता है और -application:didFinishLaunchingWithOptions: पर कॉल करता है, जो इसके प्रतिनिधि को संभालने के तरीकों में से एक है। AppDelegate.m पर एक नज़र डालें, और आपको इस विधि के लिए कुछ टेम्पलेट कोड मिलेगा। यह वह जगह है जहां आप अनुकूलित करना आरंभ, बातें जगह में होने की जरूरत है कि इससे पहले कि UIWindow और UIView के अन्य उदाहरण बनाया हो बनाने कर सकते हैं:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

तो, अब आवेदन खिड़की और रूट दृश्य नियंत्रक परिभाषित कर रहे हैं, और अनुप्रयोग बंद है और चल रहा है।

यह सब, और बहुत-सी, उत्कृष्ट यहां समझाया गया है: http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/