@から始まるObjective-Cのコンパイラディレクティブですが、主にプロパティと属性、プロトコルについてメモしておきます。
INDEX
Objective-Cのコンパイラディレクティブについて
これまでは@propertyと@synthesizeはセットで使うものと思っていたのですが、Xcode4.4以降では@synthesizeがなくても@propertyで定義した変数名の前に”_”(アンダースコア)を記述することでアクセス出来るようになりました。
よって、@synthesizeは意図的に名称を変更したい場合にのみ使用すればいいと思います。
コンパイラディレクティブ一覧
名前 | 説明 |
---|---|
@interface〜@end | クラスやカテゴリのプロトタイプ宣言 |
@implementation〜@end | クラスやカテゴリの実体を記述 |
@property | インスタンス変数を宣言(@interface内に記述) |
@synthesize | アクセサメソッドを自動生成(@implementation内に記述) |
@class | 外部クラスを宣言 |
@protocol | プロトコルを宣言 |
@propertyの属性一覧
属性 | 説明 |
---|---|
nonatomic | インスタンスの同時実行をさせない |
retain | ARCの強参照(参照カウントがインクリメントされる) |
strong | ARCの強参照(参照カウントがインクリメントされる) |
weak | ARCの弱参照(参照カウントがインクリメントされない) |
readonly | 読み取り専用(setterのみ生成) |
readwrite | 読み書き可(デフォルト) |
assign | 渡された値を保持 |
copy | 引数の値をコピーして渡す |
readwriteはreadonlyをオーバーライドするときのみ使用しない限りはあまり登場する機会はありません。
retainとstrongはどちらも同じで、ARC以降にretainがstrongに置き換わったため、今後はstrongを使用すれば問題ないと思います。
プロトコルの適合
プロコトルとはオブジェクトの振る舞いを定義したメソッドの集まりです。プロトコルで宣言されているメソッドを、クラスに実装することをプロコトルの適合といいます。
- プロトコルの宣言
-
[code]
@protocol MyProtocol
– (void)myProtocolMethod; //メソッドの定義
@end
[/code] - プロトコルの適合
-
[code]
@interface MyObj : NSObject@end
@implementation
– (void)myProtocolMethod {
NSLog(@”myProtocolMethod”);
}
@end
[/code] - プロトコルで宣言されたメソッドの呼び出し
-
[code]
MyObj *myobj [[MyObj alloc] init];
[myobj myProtocolMethod];
[/code]
まとめ
メモリー管理やARCについての知識が少ないとstrongやweakといった属性が理解し難いと思います。ARCに関しては自身の勉強も兼ねて、後日あらためて記事にしたいと思います。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。