2010-03-28 13 views
6

मैं शुरू करने पर विचार कर रहा हूँ:उद्देश्य सी में isKindOfClass का उपयोग करने का प्रदर्शन दंड क्या है?

if ([myInstance isKindOfClass:[SomeClass class]]) { do something...} 
कोड का एक टुकड़ा है कि बहुत अक्सर कहा जाता हो जाता है में

। क्या मैं एक महत्वपूर्ण प्रदर्शन जुर्माना पेश करूंगा? उद्देश्य सी में, क्या यह निर्धारित करने का एक तेज तरीका है कि दिया गया ऑब्जेक्ट उदाहरण कुछ वर्ग प्रकार का है या नहीं? उदाहरण के लिए, निम्नलिखित तेज है? (मुझे पता है परीक्षण कुछ अलग है)

if (myInstance.class == [SomeClass class]) { do something else...} 
+6

क्या अपने रूपरेखा के परिणाम आपको बता दिया? –

+0

मैंने अभी तक कोई प्रोफाइल नहीं किया है; यह मेरा अगला कदम है। मैं कुछ दस्तावेज ढूंढने की उम्मीद कर रहा था जो अंधा perf परीक्षण में कूदने से पहले उद्देश्य सी में कक्षाओं के लिए अंतर्निहित जादू बताते हैं। हालांकि, मुझे कुछ भी नहीं मिला है इसलिए मैं अगले पर अलग-अलग क्रमिक प्रयास करने जा रहा हूं। किसी भी सुझाव के बारे में कोई सुझाव कि मैं किसी दिए गए उदाहरण के वर्ग प्रकार की पहचान कैसे कर सकता हूं? – durcicko

+0

अंधा प्रदर्शन परीक्षण जैसी कोई चीज नहीं है ... केवल अंधा अनुकूलन! साथ ही, ओबीजे-सी रनटाइम तय करता है कि प्रत्येक बार जब आप कोई विधि कॉल करते हैं तो ऑब्जेक्ट क्लास के आधार पर कॉल करने के लिए कौन सी विधि कॉल करें, इसलिए उस श्रेणी के तरीके में {कुछ करें ...} डालकर इसका लाभ उठाएं – codewarrior

उत्तर

4

तेज तरीका अगर दो वस्तुओं एक ही वर्ग के होते हैं उनके isa संकेत तुलना करने के लिए है देखने के लिए। हालांकि, इसका मतलब है कि आप याद करेंगे जब एक ऑब्जेक्ट की कक्षा अन्य ऑब्जेक्ट की कक्षा का उप-वर्ग है, जो वास्तव में isKindOfClass: के लिए है।

परवाह किए बिना, अनुकूलन आप के बारे में बात कर रहे हैं पहले से ही यहाँ किया गया है:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

+0

यह वही जानकारी है जिसे मैं ढूंढ रहा था। उस दिशा में मुझे इंगित करने के लिए धन्यवाद। – durcicko

+0

किसी ने मुझे बताया कि ऐप्पल नहीं चाहता कि आप सीधे 'आईएसए' पॉइंटर्स का उपयोग कर रहे हों। – funroll

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