2012-09-01 20 views
9

ऐप्पल guideline के अनुसार, ऐसा लगता है कि यह भ्रमित है, उदा। विधि viewWithTagउद्देश्य सी सम्मेलन: उपयोग करने के लिए कब और कब उपयोग करना है

जावा में के लिए, मैं एक विधि

getViewByTag // Java version, equivalent to viewWithTag in Obj-C 

कहा जाता है लेकिन मैं यह भी पाया objectForKey जैसे कुछ विधि देखते हैं होता है, तो क्यों न सिर्फ बजाय objectWithKey का उपयोग करें?

getObjectByKey or just get // Java version, equivalent to objectForKey, 
          // but why not objectWithKey? Or not viewForKey above? 
+1

अच्छा सवाल, बीटीडब्ल्यू। यह उन प्रश्नों में से एक है जिनके लिए मुझे एक जवाब चाहिए, लेकिन कभी नहीं पूछना सोचा। उस मामले के लिए खुद से भी मत पूछो। – Mazyod

+0

ऐप्पल प्रोग्रामर फ्रेड हमेशा "के लिए" इस्तेमाल करता था और ऐप्पल प्रोग्रामर जिम हमेशा "साथ" इस्तेमाल करता था। –

उत्तर

3

मेरी अवलोकन

से स्थापित करने जबकि/वस्तुओं हो रही है, तो आप के साथ उपयोग करें।

उदा। NSMutableArray वस्तु की सेटिंग के लिए

- (id)initWithCapacity:(NSUInteger)numItems 

की स्थापना करते समय/वस्तुओं के लिए गुण हो रही है, तो आप लिए का उपयोग करें। प्रकार की संपत्ति के लिए

e.g.For सेटिंग मूल्य NSMutableDictionary

- (void)setValue:(id)value forKey:(NSString *)key 

आशा यह आपके संदेह

+0

दुर्भाग्य से, 'NSDictionary' के लिए विधियां' ऑब्जेक्टफोरकी: ''सेटऑब्जेक्ट: forKey:', जो उद्देश्य-सी गुणों के पास कहीं नहीं है। – Mazyod

3

with की तरह ऐसा लगता है गुण है कि सीधे एक वस्तु के अंतर्गत आता है के लिए प्रयोग किया जाता है समाशोधन में मदद करता। UIView में tag संपत्ति है इसलिए viewWithTag:14 को के रूप में दोहराया जा सकता है "जिस दृश्य टैग की संपत्ति 14 है"

जब आप किसी कुंजी से जुड़े किसी शब्दकोश में ऑब्जेक्ट डालते हैं, तो यह कुंजी वस्तु के स्वयं का हिस्सा नहीं है। objectForKey:@"foo"कहना foo "" एक वस्तु है कि कुंजी से लिंक किया गया के लिए देखो "एक तरीका है।

+0

+1 इस प्रकार मैं इसका वर्णन करूंगा। 'साथ 'का अर्थ है कि पास किया गया मान लक्ष्य वस्तु की एक संपत्ति है, जबकि' के लिए 'का अर्थ है कि पारित मूल्य परिस्थिति से लक्षित वस्तु से जुड़ा हुआ है। –

5

मैं वास्तव में लगता है कि यह क्या सबसे जवाब लगता है की तुलना में बहुत सरल है। मुझे लगता है कि यह जटिल प्रोग्रामिंग भाषा के साथ क्या करना कम है बारीकियों, और प्रश्न में वस्तु की विशिष्टता के साथ क्या करना अधिक है।

जब आप कहते हैं कि viewWithTag:, आप UIView के लिए किसी भी राय यह है कि टैग मौजूद हो पूछ रहे हैं। वहाँ कई हो सकता है। UIView एक वापस आ जाएगी 'em।

हो बुनाई, objectForKey: (मेरे लिए) लगता है कि उस कुंजी से जुड़े एक ऑब्जेक्ट (या शून्य) होना चाहिए। तो, कुंजी किस्म मौजूद है और एक वस्तु के लिए बाध्य (कसकर युग्मित) है।

संपादित करें:

एक जवाब के अस्तित्व का उल्लेख "से", आगे निकलता है जो कैसे सम्मेलन प्रोग्रामिंग भाषा जटिलताओं के साथ कोई संबंध नहीं है नहीं है। यह सिर्फ प्राकृतिक अंग्रेजी है।

NSString के stringByAppendingString:, उदाहरण के लिए, द्वारा उपयोग करता है, सिर्फ इसलिए कि समारोह एक क्रिया जोड़कर साथ लिखा है। आप एपेंडिंग के साथ नहीं कह सकते हैं, यह खराब अंग्रेजी है।

+1

मैं सिर्फ इस चर्चा के लिए "बहुलता" शब्द पेश करना चाहता था।यह एक शब्द है जो पहले मेरे दिमाग में आया था, और अवधारणा ने इस उत्तर में बताया (+1)। जहां तक ​​"द्वारा", यह क्रिया का तात्पर्य है, दूसरा बस एक चयन का अर्थ है। –

+0

नया संपादन लोगों को व्याकरण और गैर-तकनीकी सामान सिखाता है .. कुछ [अन्य] चुनें (http://english.stackexchange.com/?as=1) फ़ोरम –

0

ऐप्पल दिशानिर्देश इस तरह के किसी भी दावों को नहीं करते हैं कि कब या उसके साथ उपयोग करना है। कोडिंग सम्मेलन का बिंदु यह इंगित करना है कि तर्क के प्रकार क्या हो सकते हैं और विधि हस्ताक्षर लिखने के लिए जो प्राकृतिक ध्वनि हैं।

विधि नाम के लिए या उसके लिए कारण विधि के पहले पैरामीटर के प्रकार या उद्देश्य की पहचान करना है, जो इसे बेहतर पढ़ने में मदद करता है।

ऐप्पल स्वयं कई सम्मेलनों का उपयोग करता है लेकिन यह मूल उद्देश्य है, कोई ठोस अधिकार या गलत नहीं है, विधि विधि में विधि के पहले पैरामीटर को या उसके साथ या तो पहचानने का प्रयास करें।

और ऐप्पल सम्मेलनों के लिए - प्राप्त करें (जो भी) वास्तविक सम्मेलनों का हिस्सा भी नहीं है, इसलिए आप पूछ सकते हैं कि मैं कब उपयोग करता हूं या नहीं।

पढ़ें इस http://cocoadevcentral.com/articles/000082.php

भी (द्वारा) भूल न NSURL urlByAppendingPathComponent आदि - इसके लिए एक महसूस हो और आप अभ्यस्त जाना गलत

0

आप "के साथ" का उपयोग जब भी पैरामीटर स्वामित्व में है या स्वामित्व में, या ऑब्जेक्ट द्वारा "साथ" शब्द के बाईं ओर अपेक्षाकृत स्थायी विशेषता होगी।

  • initWithCapacity/arrayWithCapacity - (जब तक आप प्रारंभिक क्षमता से परे यह करने के लिए वस्तुओं को जोड़ने) क्षमता कंटेनर वस्तु की एक विशेषता बुलाया जा रहा हो जाएगा और अपेक्षाकृत स्थायी होगा

  • viewWithTag - एक दृश्य वापसी "निर्दिष्ट" टैग "विशेषता" है।

जबकि आप "के लिए" का उपयोग करें "वांछित" वस्तु और एक "टोकन" वस्तु है कि आप इसे करने के लिए उपयोग करने के बीच एक हारने संघ निरूपित करने के लिए। - objectForKey/attributeForValue - आम तौर पर "ऑब्जेक्ट" की कुंजी नहीं होती है। - documentForWindow - विंडो विंडो नियंत्रक के स्वामित्व में है, न कि दस्तावेज़। इसके अलावा प्रत्येक दस्तावेज़ के लिए एक से अधिक खिड़की हो सकती है।

लेकिन कई एक भी विधि कॉल के भीतर एक ही प्रकार के वस्तुओं के हारने संघों के लिए, यह प्रथागत है कि आप की तरह कुछ का उपयोग करें:

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo: 

तो इस तरह के जटिल कॉल के लिए आदेश है:

  1. के लिए
  2. होने
साथ
संबंधित मुद्दे