2011-12-02 12 views
6

इन दोनों तरीकों है कि मैं एक ही बात (एक BOOL लिए डाली) कर विश्वास करते हैं क्या अंतर है:बूल के लिए कलाकारों के बीच क्या अंतर है और संदेश boolValue भेज रहा है?

BOOL boolOne = (BOOL) [dictionary objectForKey:@"boolValue"]; 
BOOL boolTwo = [[dictionary objectForKey:@"boolValue"] boolValue]; 

जब या तो एक दूसरे के ऊपर इस्तेमाल किया जाना चाहिए?

उत्तर

6

वे काफी अलग हैं।

पहले शब्दकोश से ऑब्जेक्ट पॉइंटर प्राप्त होता है, फिर पॉइंटर को BOOL के रूप में व्याख्या करता है। इसका मतलब यह है कि किसी भी गैर nil सूचक YES के रूप में व्याख्या की जाएगी, और nilNO के रूप में। ठोस उदाहरण में, जैसे शब्दकोशों में nil पॉइंटर्स नहीं हो सकते हैं, आपको कोड की इस पंक्ति से केवल YES मिल जाएगा।

दूसरा एक ही वस्तु को शब्दकोश से लेता है, फिर उस ऑब्जेक्ट पर boolValue संदेश भेजता है। संभवतः, और यदि वस्तु संदेश को पहचानती है, तो इसके परिणामस्वरूप ऑब्जेक्ट का BOOL संस्करण होगा।

एक ठोस उदाहरण के रूप में, शब्दकोश एक NSNumber कुंजी @"boolValue" के साथ जुड़े शामिल है, NSNumber संदेश boolValue प्राप्त होगा, और अगर यह गैर शून्य वापसी YES, अन्यथा NO है।

तो अपने प्रश्न का उत्तर देने के लिए, आपको दूसरे फॉर्म का उपयोग करना चाहिए। BOOL पर पॉइंटर कास्टिंग शायद ही कभी कोई समझ में आता है।

6

नहीं, वे समान नहीं हैं। अंतर यह है कि दूसरा एक सही है, पहला नहीं है।

आपकी पहली पंक्ति में आप बस पॉइंट को पॉइंट डालें जो कि पॉइंटर शून्य है या नहीं, और ऑब्जेक्ट में वास्तव में संग्रहीत मूल्य के साथ कुछ भी करने के लिए कुछ भी नहीं है।

3
[[dictionary objectForKey:@"boolValue"] boolValue]; 

एक डाली नहीं है, लेकिन NSNumber पर एक विधि, कि एक bool रिटर्न कहता है। एक कलाकार के अंदर शामिल हो सकता है - लेकिन कार्यान्वयन विवरण सार्वजनिक नहीं हैं।

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