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


141

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

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


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

जवाबों:


159

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

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

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

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


4
क्या आप @ (अभिव्यक्ति) के बारे में कुछ बता सकते हैं? यह एकमात्र आइटम है जिसे मैं पॉपकोड में नहीं दिखाता जब मैं @ xcode में टाइप करता हूं।
13

10
@ (99) [NSNumber numberWithInteger: 99] के समान है। @ (YES) [NSNumber numberWithBool: YES] के समान है। @ चिह्न ऑब्जेक्ट बनाने का एक शॉर्टकट है।
जोजो

7
क्या कोई और इस तथ्य से भ्रमित है कि यह "उत्तर" वास्तव में दिए गए प्रश्न का उत्तर नहीं देता है? पूछने वाला कहता है "ऑब्जेक्टिव-सी में '@' का क्या अर्थ है?" और उत्तरदाता कहता है "इसका मतलब है कि आप ऑब्जेक्टिव-सी का उपयोग कर रहे हैं।" मुझे लगता है कि वह पहले से ही ज्यादा जानता था ...
जॉन मैकक्लब

1
मनमाना प्रकार; यह आधार ASCII सेट में होने की जरूरत है और पहले से ही C द्वारा उपयोग नहीं किया गया था जब पहला ऑब्जेक्टिव-सी प्रीप्रोसेसर लिखा जा रहा था। इसलिए यह है @
क्रिस हैनसन

1
जॉन McClung: लियो सही है, कोई "गहरा अर्थ" नहीं है। @चरित्र, सी द्वारा अप्रयुक्त था तो यह विकल्प पार्स वह भी मौजूदा सी कोड के साथ 100% संगतता संरक्षित करने के लिए एक सुविधाजनक "एस्केप हैच" था।
क्रिस हैनसन

63

से @ प्रतीक: ऑब्जेक्टिव-सी ट्यूटोरियल , कारण यह विभिन्न कीवर्ड के सामने पर है:

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

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


24

से MacRumors: ऑब्जेक्टिव-सी ट्यूटोरियल , जब स्ट्रिंग शाब्दिक के सामने:

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

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


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

16

वहाँ से मैनुअल :

ऑब्जेक्टिव-सी फ्रेमवर्क आमतौर पर सी-स्टाइल स्ट्रिंग्स का उपयोग नहीं करते हैं। इसके बजाय, वे NSString ऑब्जेक्ट के रूप में स्ट्रिंग्स पास करते हैं।

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

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

3
लेकिन यह केवल एक उदाहरण है कि कहां @उपयोग किया जाता है। मैं इस तरह कोड देख रहा हूँ: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... NSString के साथ कुछ नहीं करना है
GreenAsJade
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.