創建新對象非常簡單,無需使用Foundation的alloc
。 Objective-C運行時庫本身提供的函數允許從類中分配對象並在稍後解除對象分配,因此不需要額外的庫來創建和銷燬對象。
函數id class_createInstance(Class cls, size_t extraBytes)
接收一個用於分配新對象的類對象和一個幾乎總是爲零的整數,並返回一個新的cls
實例。
同樣,函數id object_dispose(id obj)
需要一個Objective-C對象,調用每個C++對象實例變量的C++析構函數,刪除現有的相關引用並將其釋放。
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 2013-03-23 22:57:19
@occulus因爲我想使用Objective C作爲C++的替代品,所以我沒有運行Mac OS – texasbruce 2013-03-23 22:58:20
@texasbruce然後使用GNUStep的運行時。 (不完全是平臺的實際選擇,但它會比嘗試重新創建'NSObject'更好。) – millimoose 2013-03-23 22:58:46