2009-04-25 7 views
7

मैं एक ऐसा फ़ंक्शन बनाना चाहता हूं जिसे मैं ऑब्जेक्ट पास करता हूं। फिर, इस समारोह को मेरे लिए कुछ जानकारी मुद्रित करनी चाहिए।मैं उद्देश्य-सी में एक फ़ंक्शन कैसे लिख सकता हूं, कि मैं अपने आईफोन ऐप में किसी भी ऑब्जेक्ट का उपयोग कर सकता हूं?

चाहते:

analyzeThis(anyObject); 

मैं तरीकों के बारे में पता है, लेकिन एक समारोह बनाने के लिए कैसे नहीं। जैसा कि मैं समझता हूं, एक समारोह सभी विधियों और वर्गों में वैश्विक काम करता है, है ना?

उत्तर

14

आप ऐसा ही करेंगे जैसा कि आप सी में लिखेंगे। इसलिए, यदि आपके पास myLibraryFunctions.m नामक स्रोत फ़ाइल में परिभाषित किया गया है, तो कोई भी व्यक्ति जो उस फ़ंक्शन का उपयोग करना चाहता था, में हेडर फ़ाइल शामिल होगी आपको इसे निर्धारित (शायद myLibraryFunctions.h, और फिर बस सुनिश्चित करें कि वे वस्तु फ़ाइल के साथ लिंक (इस का सबसे Xcode में आप के लिए किया जाएगा, तो आप बस अपने "वैश्विक" कार्यों को रखने के लिए एक फ़ाइल बनाने और उनके लिए हेडर फाइल शामिल करना । आप से उस तक पहुंच है कि किसी भी स्रोत फ़ाइल में तो बस इसे परिभाषित:

void analyzeThis(id anyObject); 

void analyzeThis(id anyObject) { 
    NSLog(@"Object %p: %zu, %@", anyObject, malloc_size(anyObject), anyObject); 
} 

लेकिन वास्तविकता में, आपके द्वारा लिखी हैं जो आप अपने समारोह में चाहता था इन कार्यों ज नहीं है। किसी भी वर्ग परिभाषाओं या उस तरह कुछ भी का हिस्सा बनने के लिए। इस मामले में, वे बिल्कुल वही हैं जैसे वे सी

+0

धन्यवाद! एक्सकोड में उस वैश्विक फ़ंक्शन फ़ाइल को स्थापित करने के लिए छुपा विकल्प कहां है, ताकि एक्सकोड मेरे लिए सभी हेडर आयात कर सके? वह महान होगा! – Thanks

+1

अपने प्रीकंपील्ड हेडर में हेडर आयात जोड़ें। यह आपके प्रोजेक्ट नाम के साथ एक होगा और फिर अंत में _pch होगा। यह आमतौर पर एक एक्सकोड परियोजना में "अन्य स्रोत" समूह के तहत होता है। –

1

क्या आप एनएसओब्जेक्ट की वर्णन विधि को फिर से लागू करने की कोशिश कर रहे हैं? यदि आप एक NSObject संदेश भेजते हैं तो यह एक स्ट्रिंग वापस लौटाएगा जिसमें स्वयं के बारे में जानकारी होगी। आप ओवरराइड कर सकते हैं - (एनएसएसटींग *) विवरण और इस स्ट्रिंग में अधिक जानकारी जोड़ें।

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

+0

अच्छा संकेत, धन्यवाद। वास्तव में मैं स्मृति प्रबंधन के बारे में कुछ कोशिश करना चाहता था। एक फ़ंक्शन जो ऑब्जेक्ट अभी भी मौजूद है, तो रिलीज़ संदेश से पहले जांच करेगा। योग्य हो सकता है। अभी मैं पूरी तरह से आश्वस्त नहीं हूँ। – Thanks

+1

यदि आप डीबगिंग के लिए उस विधि को बना रहे हैं, तो आपको वास्तव में NSZombie का उपयोग करना चाहिए। आप रनटाइम पर एक गार्ड के रूप में यह प्रयोग कर रहे हैं, यह अन्य समस्याओं का कारण बन सकता है ... –

+0

यह NSZombie से पूरी तरह अलग है। –

1

दो तरीके ऐसा करने के लिए मौजूद हैं:

  • एक वैश्विक समारोह लिखते हैं, आप सी
  • में
  • NSObject का एक वर्ग है जिसमें आप एक तरीका है जिसके तो सभी के लिए उपलब्ध हो जाएगा लागू बनाने करना होगा बस के रूप में कक्षाएं जिनके पास एनएसओब्जेक्ट पूर्वज है।
संबंधित मुद्दे

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