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

@から始まるObjective-Cのコンパイラディレクティブですが、主にプロパティと属性、プロトコルについてメモしておきます。

Objective-Cのコンパイラディレクティブについて

これまでは@propertyと@synthesizeはセットで使うものと思っていたのですが、Xcode4.4以降では@synthesizeがなくても@propertyで定義した変数名の前に”_”(アンダースコア)を記述することでアクセス出来るようになりました。
よって、@synthesizeは意図的に名称を変更したい場合にのみ使用すればいいと思います。

コンパイラディレクティブ一覧

名前説明
@interface〜@endクラスやカテゴリのプロトタイプ宣言
@implementation〜@endクラスやカテゴリの実体を記述
@propertyインスタンス変数を宣言(@interface内に記述)
@synthesizeアクセサメソッドを自動生成(@implementation内に記述)
@class外部クラスを宣言
@protocolプロトコルを宣言

@propertyの属性一覧

属性説明
nonatomicインスタンスの同時実行をさせない
retainARCの強参照(参照カウントがインクリメントされる)
strongARCの強参照(参照カウントがインクリメントされる)
weakARCの弱参照(参照カウントがインクリメントされない)
readonly読み取り専用(setterのみ生成)
readwrite読み書き可(デフォルト)
assign渡された値を保持
copy引数の値をコピーして渡す

readwriteはreadonlyをオーバーライドするときのみ使用しない限りはあまり登場する機会はありません。
retainとstrongはどちらも同じで、ARC以降にretainがstrongに置き換わったため、今後はstrongを使用すれば問題ないと思います。

プロトコルの適合

プロコトルとはオブジェクトの振る舞いを定義したメソッドの集まりです。プロトコルで宣言されているメソッドを、クラスに実装することをプロコトルの適合といいます。

プロトコルの宣言
@protocol MyProtocol
- (void)myProtocolMethod; //メソッドの定義
@end
プロトコルの適合
@interface MyObj : NSObject <MyProtocol>

@end
@implementation
- (void)myProtocolMethod {
    NSLog(@"myProtocolMethod");
}
@end
プロトコルで宣言されたメソッドの呼び出し
MyObj *myobj [[MyObj alloc] init];
[myobj myProtocolMethod];

まとめ

メモリー管理やARCについての知識が少ないとstrongやweakといった属性が理解し難いと思います。ARCに関しては自身の勉強も兼ねて、後日あらためて記事にしたいと思います。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents