2010-06-26 15 views
6

में कक्षा उदाहरण कैसे प्राप्त कर सकता हूं मेरे पास 2 कक्षाएं, अभिभावक और बच्चे हैं, और अभिभावक के पास func नामक एक क्लास विधि है। अब मैं क्लास इंस्टेंस को मल्टीक विधि में प्राप्त करना चाहता हूं ताकि यह समझ सके कि कौन सी कक्षा कॉलर है।उद्देश्य-सी: क्लास विधि

@interface Parent : NSObject 
+ (void)func; 
@end 

@implementation Parent 

+ (void)func { 
    Class *class = howToGetClass(); 
    NSLog(@"%@ call func", class); 
} 

@end 

@interface Child : Parent 
@end 

int main() { 
    [Child func]; // call func from Child 
} 

कक्षा विधि में कक्षा उदाहरण (या कक्षा का नाम) प्राप्त करने का कोई तरीका है?

उत्तर

16

आप इसे log/एक कक्षा के रूप में यह प्राप्त करना चाहते हैं, तो आप सिर्फ self की जरूरत है। बस। तो

+ (void)func { 
    Class class = self; 
    NSLog(@"%@ call func", class); 
} 

या

+ (void)func { 
    NSLog(@"%@ call func", self); 
} 

भी है, तो आपको NSString, NSStringFromClass (स्वयं) के रूप में नाम प्राप्त करना चाहते हैं, तो आप को कवर किया। (एक char * के रूप में, class_getName (self) वह है जिसे आप ढूंढ रहे हैं)

+0

मैं कुछ उपयोगिता विधियों (जैसे सभी() django में) को NSManagedObject में जोड़ने की कोशिश कर रहा हूं। तो मुझे कॉलर को अलग करने की जरूरत है। 'स्वयं' का उपयोग करना मैं जानना चाहता था! धन्यवाद! – taichino

+0

यह मैं नहीं था जिसने वोट दिया था, लेकिन मैंने अभी जांच की है, और एक वर्ग विधि स्वयं == [स्वयं वर्ग] बस देखा कि यह एक और टिप्पणी में कहा गया था, लेकिन स्पष्ट करने के लिए, वे पहचानदार हैं, कम से कम एक वर्ग विधि में। तो आप सही थे, और मैं –

+1

वर्ग * वर्ग = स्वयं था; गलत है। हटाना *। सही वाक्यविन्यास है: कक्षा वर्ग = स्वयं; – Lukasz

3

वर्तमान वर्ग वस्तु पाने के लिए आपको ऐसा करने में सक्षम होना चाहिए:

[self class]; 

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

भ्रम से बचने के संपादित ...

+0

स्पष्टीकरण के लिए, यह आपकी कक्षा की 'कक्षा' ऑब्जेक्ट देता है, न कि केवल * नाम * जैसा कि उत्तर द्वारा निहित है। –

+3

वास्तव में, [स्वयं वर्ग] एक वर्ग विधि में स्वयं के समान है। दस्तावेज़ (ठीक है GNUSTep दस्तावेज़) वास्तव में कहते हैं कि इसे केवल 'वापसी स्वयं' के साथ लागू किया गया है। यह कक्षाओं को तर्क के रूप में पास करने के लिए केवल मौजूद है, http://stackoverflow.com/questions/3107213/why-do-we-have-to-do-myclass-class-in-objective-c –

+1

बहुत बहुत धन्यवाद! मुझे नहीं पता था कि 'स्वयं' वर्ग विधि में इस्तेमाल किया जा सकता है! – taichino

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