alloc
在不使用from Foundation的情况下创建新对象非常简单。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
就这样!