2012-01-25 3 views
18

के लिए मैं NSLog और ObjectiveC में Printf बयान बीच अंतर के बारे में जानना चाहते हैं (आवेदन प्रयोजन के लिए ...!)अंतर ObjectiveC

सभी डेवलपर NSLog का उपयोग क्यों करते हैं बजाय Printf?

दोनों समान दिखते हैं, लेकिन आंतरिक काम में क्या अंतर है?

किस बिंदु पर उन्हें अलग किया जा सकता है?

उत्तर

29
  • printf() एक सी मानक पुस्तकालय समारोह, एक सी स्ट्रिंग निरंतर (const char *) ने अपने प्रारूप तर्क के रूप में स्वीकार कर रहा है। printf() stdout लिखते हैं।

  • NSLog() एक फाउंडेशन समारोह, प्रारूप के रूप में एक निरंतर NSString स्वीकार कर रहा है, और एक विस्तारित फॉर्मेट स्पेसिफायर सेट (उदाहरण के लिए, printf() शामिल नहीं है प्रिंट वस्तुओं %@ द्वारा निर्दिष्ट, NSLog() करता है) है। NSLog() वास्तविक प्रारूप को मुद्रित करने और sdterr को लिखने से पहले प्रक्रिया का नाम और तारीख भी प्रिंट करता है।

असल में, हम कह सकते हैं कि NSLog() ऑब्जेक्टिव-सी (अधिक सटीक, कोको और कोको टच) और विशिष्ट प्रयोजनों के लिए एक विस्तारित printf() शैली कार्य है।

8

डेवलपर बिंदु से, सबसे बड़ा अंतर यह है कि एनएसएलओजी% @ प्रारूप के माध्यम से उद्देश्य-सी ऑब्जेक्ट प्रकार का समर्थन करता है। एनएसएलओजी भी stderr लिखता है, जबकि printf stdout लिखते हैं।

3

मैं NSLog और printf के बीच दो मुख्य अंतर देखें:

  1. NSLog%@ विस्तार के माध्यम से NSString वस्तुओं का समर्थन करता है;

  2. इसके अलावा, NSLog स्वचालित रूप से समय और प्रक्रिया डेटा कहते हैं (जैसे, 2012-01-25 17: 52: 10.479 प्रक्रिया [906: 707])

+1

अधिक सटीक रूप से: 'एनएसएलओजी उस ऑब्जेक्ट के - (एनएसएसटींग *) विवरण को स्पष्ट रूप से कॉल करके% @ एक्सटेंशन के माध्यम से ऑब्जेक्ट्स का समर्थन करता है; विधि' –

+0

तीसरा सबसे बड़ा अंतर यह है कि एनएसएलओजी आउटपुट भेजता है, जहां printf stdout भेजता है। – Munim

20

NSLog एक printf तरह है, लेकिन यह करता है थोड़ा और:

  • आउटपुट में टाइमस्टैम्प जोड़ा जाता है।
  • आउटपुट को एक्सकोड कंसोल पर भेजा जाता है, या जो भी stderr परिभाषित किया जाता है।
  • यह सभी प्रिंटफ़ विनिर्देशकों को स्वीकार करता है, लेकिन यह ऑब्जेक्ट्स description विधि द्वारा प्रदान की गई स्ट्रिंग को प्रदर्शित करने वाली ऑब्जेक्ट्स के लिए @ ऑपरेटर भी स्वीकार करता है। (description NSObject का हिस्सा है, इसलिए ऑब्जेक्ट का वर्णन करने वाली स्ट्रिंग को वापस करने के लिए सभी ऑब्जेक्ट इसे ओवरराइड कर सकते हैं)।
  • आउटपुट को ऐप्पल सिस्टम लॉग (एएसएल) को भी भेजा जाता है, जो ऐप्पल का syslogd का संस्करण है। यह डेटा सी एपीआई का उपयोग करके अन्य अनुप्रयोगों द्वारा या ओएस एक्स उपयोगकर्ता द्वारा "कंसोल" एप्लिकेशन का उपयोग करके पढ़ा जा सकता है।
+0

+1: अच्छा और संक्षिप्त। – ArtOfWarfare