@synthesize default と Class Extensions Variables

2010年12月4日土曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

LLVM と Clang を使うと次のことができるらしい。

・@synthesize の省略
・Class Extensions でインスタンス変数定義

元ネタはここから。
M Cubed Software - Blog


設定方法はターゲットのビルド設定を開き2つの設定を行う。

1つはコンパイラの指定。
LLVM compiler を選択する。

次はコンパイラオプションの指定。
 -Xclang -fobjc-nonfragile-abi2 を指定する。


すると下記のコードがコンパイルできるようになる。

SampleModel.h
@interface SampleModel : NSObject {

}

@end
SampleModel.m
#import "SampleModel.h"

@interface SampleModel()
{
 NSString* name;
}
@property (nonatomic, copy) NSString* name;
@end

@implementation SampleModel

-(NSString*)description
{
 return self.name;
}

@end

@synthsize を書かなくてもプロパティが使える。また Class Extensions(カテゴリ)でもインスタンス変数の定義が可能。これらは GCC でコンパイルするとエラーになる。

- - - -
LLVM を使うか GCC(デフォルト)を使うかはまだ意見が割れている感じ。LLVMの方がエラーメッセージが分かりやすい、コンパイル速度が速い、一方、GCCの方がトータルの速度が速い、安定している、といった意見(噂?)もあるようだ。



参考情報


Low Level Virtual Machine - Wikipedia

clang - Wikipedia

Nick Farina - Simplify your models with SMModelObject

この特性を生かしたモデルクラス SMModelObject の活用例。上記サイトから引用。

こんな感じで定義が書ける。dealloc もいらない(!)。
-description がオーラバーライドされていてXML風な表示

Responses

Leave a Response

人気の投稿(過去 30日間)