alloc
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
それで全部です!