・@synthesize の省略
・Class Extensions でインスタンス変数定義
元ネタはここから。
M Cubed Software - Blog
設定方法はターゲットのビルド設定を開き2つの設定を行う。
1つはコンパイラの指定。
LLVM compiler を選択する。
次はコンパイラオプションの指定。
-Xclang -fobjc-nonfragile-abi2 を指定する。
すると下記のコードがコンパイルできるようになる。
SampleModel.h
@interface SampleModel : NSObject { } @endSampleModel.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