2008-08-25 26 views
134

मैं उद्देश्य-सी सीख रहा हूं और @ प्रतीक में बंपिंग करता हूं। यह विभिन्न परिदृश्यों में प्रयोग किया जाता है, उदाहरण के लिए स्ट्रिंग की शुरुआत में या एक्सेसर विधियों को संश्लेषित करने के लिए।@ प्रतीक उद्देश्य-सी में क्या दर्शाता है?

उद्देश्य-सी में @ प्रतीक का क्या अर्थ है?

+0

क्यों @ @interface और इससे पहले कि प्रयोग किया जाता है @ समाप्त? –

उत्तर

153

में @ चरित्र सी या सी ++ पहचानकर्ता में नहीं किया जाता है की तुलना में, तो यह प्रयोग किया जाता है बनाता है उद्देश्य-सी भाषा कीवर्ड को इस तरह से पेश करने के लिए जो अन्य भाषाओं के कीवर्ड के साथ संघर्ष नहीं करेगा। यह भाषा के "उद्देश्य" भाग को सी या सी ++ भाग के साथ स्वतंत्र रूप से अंतःक्रिया करने में सक्षम बनाता है।

इस प्रकार बहुत कम अपवादों के साथ, किसी भी समय आप कुछ उद्देश्य-सी कोड में @ देखते हैं, तो आप सी या सी ++ संरचनाओं के बजाय उद्देश्य-सी संरचनाओं को देख रहे हैं।

प्रमुख अपवाद id, Class, nil, और Nil है, जो आम तौर पर भाषा कीवर्ड के रूप में इलाज कर रहे हैं, भले ही वे यह भी एक typedef या #define उनके पीछे हो सकता है। उदाहरण के लिए, कंपाइलर वास्तव में id का इलाज करता है, विशेष रूप से सूचक प्रकार रूपांतरण नियमों के संदर्भ में यह घोषणाओं पर लागू होता है, साथ ही साथ जीसी लेखन बाधा उत्पन्न करने के निर्णय के लिए भी।

अन्य अपवाद in हैं, out, inout, oneway, byref, और bycopy; इन्हें वितरित ऑब्जेक्ट्स को अधिक कुशल बनाने के लिए विधि पैरामीटर और रिटर्न प्रकारों पर स्टोरेज क्लास एनोटेशन के रूप में उपयोग किया जाता है। (वे विधि क्रम है, जो कर देख सकते हैं से उपलब्ध हस्ताक्षर का हिस्सा बन निर्धारित करने के लिए कैसे सबसे अच्छा एक सौदे को क्रमानुसार करने।) वहाँ भी @property घोषणाओं, copy, retain, assign, readonly, readwrite, nonatomic, getter भीतर गुण हैं , और setter; वे केवल @property घोषणा के विशेषता खंड में मान्य हैं।

+2

क्या आप कुछ (@ अभिव्यक्ति) के बारे में कुछ समझा सकते हैं? यह एकमात्र ऐसा आइटम है जिसे मैं पॉपक में नहीं समझता जब मैं xcode में @ टाइप करता हूं। – jchnxu

+6

@ (99) [NSNumber numberWithInteger: 99] जैसा ही है। @ (हाँ) [NSNumber numberWithBool: YES] जैसा ही है। @ साइन ऑब्जेक्ट बनाने के लिए एक शॉर्टकट है। – JoJo

+0

'एनएसएलओजी (@"% @,% @ ", [@ (9) वर्ग], [@ [@ (1), @ (2)] वर्ग]); आउटपुट' __NSCFNumber, __NSArrayI' – Nianliang

58
Objective-C Tutorial: The @ Symbol से

, कारण यह विभिन्न कीवर्ड के सामने पर है:

@ का उपयोग करते हुए यह आसान एक मौजूदा सी संकलक पर एक ऑब्जेक्टिव-सी संकलक बोल्ट को बनाना चाहिए। चूंकि @ स्ट्रिंग अक्षर को छोड़कर सी में किसी भी संदर्भ में मान्य नहीं है, तो टोकननाइज़र (कंपाइलर में प्रारंभिक और सरल चरण) को स्ट्रिंग स्थिर के बाहर @ वर्ण को देखने के लिए संशोधित किया जा सकता है (टोकनज़र स्ट्रिंग अक्षर को समझता है , इसलिए यह इस अंतर को बदलने की स्थिति में है)। जब @ का सामना करना पड़ता है तो टोकननाइज़र शेष उद्देश्य को "उद्देश्य-सी मोड" में रखेगा। (ऑब्जेक्टिव-सी पार्सर संकलक को नियमित सी मोड पर वापस लौटने के लिए जिम्मेदार होगा जब यह उद्देश्य-सी कोड के अंत का पता लगाता है)।

इसके अलावा जब एक स्ट्रिंग शाब्दिक के सामने देखा, यह एक NSString बल्कि एक 'चार *' सी

24

Macrumors: Objective-C Tutorial से, स्ट्रिंग शाब्दिक के सामने जब:

भी @ "" NSString शाब्दिक रहे हैं। यह अनिवार्य रूप से NSString की + stringWithUTF8String विधि के लिए लघुरूप है।

@ सी स्ट्रिंग्स को यूनिकोड समर्थन भी जोड़ता है।

+11

* "यह मिला NSString की + stringWithUTF8String विधि के लिए अनिवार्य रूप से लघुरूप है। "* ठीक है, बिल्कुल नहीं। स्ट्रिंग्स को आवंटित आवंटित किया जाता है, जो उन्हें '+ [NSString stringWithUTF8String:]' से अलग करता है (जिन्हें गतिशील रूप से आवंटित किया जाता है), और रिलीज़ और बनाए रखने पर उनका कोई प्रभाव नहीं पड़ता है। –

12

manual से:

ऑब्जेक्टिव-सी व्यवस्थाएं आम तौर पर सी-शैली तार का उपयोग नहीं करते। इसके बजाय, वे एनएसएसटींग ऑब्जेक्ट्स के चारों ओर तारों को पार करते हैं।

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

NSString *myString = @"My String\n"; 
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"]; 
+0

लेकिन यह केवल एक उदाहरण है जहां '@' का उपयोग किया जाता है। मैं इस तरह के कोड देख रहा हूं: 'mapperOptions = @ {kSTMapperVolumeResolutionKey: @ (वॉल्यूम रेसोल्यूशन),' ... एनएसएसटींग के साथ कुछ नहीं करना – GreenAsJade

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