2011-09-17 14 views
16

मुझे आईओएस एप्लिकेशन के स्टार्टअप समय को कम करने के लिए कहा गया है। मैं सामान्य रूप से मंच/उपकरण से बहुत परिचित हूं लेकिन मैंने पहले एप्लिकेशन स्टार्टअप समय पर ध्यान केंद्रित नहीं किया है। मैं सोच रहा हूं कि इस समस्या पर हमला करने के लिए ज्ञात पैटर्न हैं?आईओएस ऐप स्टार्टअप प्रदर्शन को मापने के कैननिकल विधि?

मुझे एहसास है कि मैं केवल application:didFinishLaunchingWithOptions: (जिसमें कोई भी पृष्ठभूमि लोडिंग कार्य शामिल है) के पूरा होने के माध्यम से मुख्य() से जाने का समय माप सकता है, लेकिन फिर से, मुझे उम्मीद है कि ऐसा करने के लिए एक और अधिक मानक तरीका हो सकता है इस।

कोई सुझाव बहुत सराहना की जाएगी!

-M

उत्तर

1

आपका विधि सही (मैं अपने माप के लिए CFAbsoluteTime का उपयोग करना चाहिये) जैसा लगता है।

एक बात जो मदद मिल सकती है आप लांच के समय को कम देखें नियंत्रकों आवेदन लांच पर महत्वपूर्ण व्यक्ति से लोड होने से बचाने के लिए है। अगर मुझे गलत नहीं लगता है तो यह आपके ऐप लॉन्च होने से पहले भी स्मृति में लोड होने के लिए मजबूर करता है। इसके बजाए, जब आपको उनकी आवश्यकता हो तो अपने दृश्य नियंत्रकों को गतिशील रूप से आवंटित करें और इनिट करें। ध्यान दें कि आप अभी भी उन दृश्यों को प्राप्त कर सकते हैं जिन्हें आप निब्स में संग्रहीत दृश्य नियंत्रकों द्वारा लोड करना चाहते हैं, आपको आईबी का उपयोग बंद करना नहीं है। बस अपने ऐप प्रतिनिधि के लिए स्थिर आउटलेट सेट करने के लिए आईबी का उपयोग न करें।

13
WWDC 2012 सत्र 235

से

main.m

#import <UIKit/UIKit.h> 

CFAbsoluteTime StartTime; 

int main(int argc, char *argv[]) 
{ 
    StartTime = CFAbsoluteTimeGetCurrent(); 

    @autoreleasepool { 
     ... 

में कोड की पहली पंक्ति पर प्रारंभ बिंदु सेट AppDelegate के में कहीं अंत बिंदु निर्धारित application:didFinishLaunchingWithOptions:

extern CFAbsoluteTime StartTime; 
... 
dispatch_async(dispatch_get_main_queue(), ^{ 
    NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime); 
}); 
+0

क्यों हैं आप 'dispatch_async'' है? अगली रन लूप पर कतार के बाद से यह समय माप के माध्यम से होगा। शायद एक बड़ा अंतर नहीं है लेकिन गलतता का एक पूरी तरह से अनावश्यक स्रोत की तरह लगता है। –

+3

@jshier 'dispatch_async' का उपयोग किया जाता है ताकि लॉग प्रिंट हो जब उपयोगकर्ता वास्तव में ऐप से बातचीत कर सके। मुख्य कतार 'एप्लिकेशन में अवरुद्ध है: didFinishLaunchingWithOptions', और हम जानना चाहते हैं कि मुख्य धागा वास्तव में इसके सभी कार्यों के साथ कब समाप्त होता है। – bclymer

+0

यह थोड़ा अजीब है, 'आवेदन: didFinishLaunchingWithOptions' मुख्य धागे पर है, तो हमें मुख्य धागे पर फिर से प्रेषण करने की आवश्यकता क्यों है? मुझे लगता है कि पहले 'viewDidAppear' पर टाइमर को रोकना थोड़ा और उचित हो सकता है, लेकिन मैंने सत्र नहीं देखा है, शायद कुछ याद आ रहा है। – Zorayr

संबंधित मुद्दे