创建新对象非常简单,无需使用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