फाउंडेशन से alloc
का उपयोग किये बिना एक नया ऑब्जेक्ट बनाना बहुत आसान है। उद्देश्य-सी रनटाइम लाइब्रेरी स्वयं फ़ंक्शंस प्रदान करती है जो किसी को कक्षाओं से वस्तुओं को आवंटित करने और बाद में उन्हें आवंटित करने की अनुमति देती है, ताकि आपको वस्तुओं को बनाने और नष्ट करने के लिए कोई अतिरिक्त लाइब्रेरी की आवश्यकता न हो।
फ़ंक्शन id class_createInstance(Class cls, size_t extraBytes)
एक क्लास ऑब्जेक्ट प्राप्त करता है, जिसमें से एक नई ऑब्जेक्ट आवंटित करने के लिए, और एक पूर्णांक, जो लगभग हमेशा शून्य होता है, और cls
का एक नया उदाहरण देता है।
इसी तरह, फ़ंक्शन id object_dispose(id obj)
एक उद्देश्य-सी ऑब्जेक्ट लेता है, प्रत्येक सी ++ ऑब्जेक्ट इंस्टेंस वैरिएबल के सी ++ विनाशक को कॉल करता है, मौजूदा संबंधित संदर्भों को हटा देता है और इसे मुक्त करता है।
class_createInstance
और object_dispose
दोनों /usr/include/objc/runtime.h
में घोषित किए गए हैं।
तो, आप अपने +alloc
और -dealloc
विधियों को लागू कर सकते हैं।आपका कार्यक्रम इस प्रकार दिखाई देगा:
#include <stdio.h>
#include <objc/runtime.h>
@interface Foo{
char * bar;
}
+(id)alloc;
-(void)hello;
@end
@implementation Foo
+(id)alloc {
// Returns a new 'Foo' object. In this case, 'self' is a 'Foo' class object,
// whose type is 'Class', as required by `class_createInstance`.
return class_createInstance(self, 0);
}
-(void)dealloc {
object_dispose(self);
}
-(void)hello {
printf("Hello world!");
}
@end
int main(){
Foo *foo = [Foo alloc];
[foo hello];
[foo dealloc];
return 0;
}
यह संकलित रूप में आप सामान्य रूप से कार्य करें:
gcc Foo.m -o Foo -lobjc
सब है कि!
आप फाउंडेशन का उपयोग करने से क्यों बचना चाहते हैं? – occulus
@ ऑकुलस क्योंकि मैं सी ++ के विकल्प के रूप में उद्देश्य सी का उपयोग करना चाहता हूं और मै मैक ओएस – texasbruce
@texasbruce नहीं चला रहा हूं फिर GNUStep के रनटाइम का उपयोग करें। (प्लेटफ़ॉर्म की बिल्कुल व्यावहारिक पसंद नहीं है लेकिन यह 'NSObject' को पुन: पेश करने की कोशिश करने से बेहतर काम करेगा।) – millimoose