जबकि ओपन सोर्स प्रोजेक्ट पर पर काम कर रहा है, मैं निम्नलिखित सी समारोह घोषणा और कार्यान्वयन में आए:उद्देश्य सी क्लास के तरीके बनाम सी कार्य
// FSNData.h
NSString *stringForMimeType(MimeType type);
@interface FSNData : NSObject
// All the expected objective-c property and instance method declarations
@end
// FSNData.m
#import "FSNData.h"
// where 'type' is an enum
// this does work as expected
NSString *stringForMimeType(MimeType type) {
switch (type) {
case MimeType_image_jpeg: return @"image/jpeg";
case MimeType_image_png: return @"image/png";
default:
NSLog(@"ERROR: FSNData: unknown MimeType: %d", type);
// do not return "application/octet-stream"; instead, let the recipient guess
// http://en.wikipedia.org/wiki/Internet_media_type
return nil;
}
}
@implementation
// all properties and methods defined in FSData.h implemented as expected
@end
यह उदाहरण आसानी के साथ एक कक्षा के स्तर का विधि के रूप में फिर से लिखा जा सकता है किसी भी समस्या से बाहर। जैसा कि है, stringFormMimeType()
सिल्ल का उपयोग करने के लिए FSNData
हेडर फ़ाइल आयात करने की आवश्यकता है।
the Apple docs को देखते हुए, यह केवल राज्यों:
क्योंकि ऑब्जेक्टिव-सी एएनएसआई सी की नींव पर टिकी हुई है, आप स्वतंत्र रूप से इंटरमिक्स ऑब्जेक्टिव-सी कोड के साथ सीधे सी कोड कर सकते हैं। इसके अलावा, आपका कोड गैर-कोको प्रोग्रामेटिक इंटरफेस में परिभाषित फ़ंक्शंस को कॉल कर सकता है, जैसे बीएसडी लाइब्रेरी इंटरफेस/usr/include में शामिल है।
कोई फर्क नहीं पड़ता कि सी कार्यों को उद्देश्य-सी विधियों का पक्ष लेना चाहिए।
इस बिंदु पर मैं एकमात्र लाभ देख सकता हूं, यह है कि उपरोक्त फ़ंक्शन को क्लास विधि के विपरीत, कुछ उद्देश्य-सी रनटाइम कॉल छोड़ दिया जाएगा। FSNData
के एक सामान्य उपयोग मामले में, यह उपयोगकर्ता (शायद डेवलपर्स तक) प्रदर्शन में उल्लेखनीय वृद्धि नहीं देगा *।
कक्षा विधि पर सी फ़ंक्शन के पक्ष में क्या लाभ (कोडिंग शैली के अलावा) मौजूद है?
* FSNData
FSNetworking लाइब्रेरी के हिस्से के रूप में उपयोग किया जाता है, इसलिए मुझे संदेह है कि किसी भी एप्लिकेशन के जीवन चक्र के दौरान हजारों नेटवर्क ऑपरेशन किए जा रहे हैं।
स्टाइल, प्रोग्राम स्ट्रक्चरिंग (कक्षा के साथ विधि को स्पष्ट रूप से जोड़ना), और थोड़ा सा (बहुत कमजोर) एक्सेस कंट्रोल मैं सोच सकता हूं। (लेकिन मुझे लगता है कि @ipmcc विरासत का उल्लेख करता है, और वहां कुछ चीजें भी हैं।) –
मैं कक्षा विधि पसंद करता हूं क्योंकि उद्देश्य-सी विधियों का नाम पैरामीटर है, जो सी फ़ंक्शन – onmyway133
@ onmyway133 मैं विशेष रूप से दूर रहने की कोशिश कर रहा था व्यक्तिगत प्राथमिकताओं से (यानी ** कोडिंग शैली के अलावा ** **) और एक तकनीकी कारण की तलाश में। –