MENU
コンテンツ再構築中

Objective-C:@propertyや@synthesize、@protocol等のコンパイラディレクティブについて

@から始まる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で共有していただければ幸いです。

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX