« 掃除機を新調 | トップページ | SyntaxHighlighter導入 »

2012/02/06

Xcode ARC時代のマイルール

 私がMacでプログラミングをしていた時代は Objective-C 1.0の時代。@propertyもガベージコレクションもARCもありませんでした。
 久しぶりにXcodeに取り組むと、いろいろ違いますね。
 そんなわけで、自分なりの覚書。

Objective-C 1.0時代のクラス定義
@interface MyClass : NSObject
{
    NSString *string;    // インスタンス変数
}
- (NSString *)string;    // ゲッターの宣言
- (void)setString:(NSString *)aString;    // セッターの宣言
@end

@implementation MyClass
- (NSString *)string     // ゲッターの実装
{
    return string;
}
- (void)setString:(NSString *)aString;    // セッターの実装
    if (string != aString) {
        [string release];
        string = [aString retain];
    }
}
@end
Objective-C 2.0時代のクラス定義
@interface MyClass : NSObject
{
     // インスタンス変数の宣言は不要に(括弧も省略可だが、一応書いておく)
}
@property (retain) NSString *string;    // セッター・ゲッターの宣言は1行に
@end

@implementation MyClass
@synthesize string = _string;    // セッター・ゲッターの実装も1行に
@end
ARC時代のクラス定義
@interface MyClass : NSObject    // 括弧は原則不要
@property (retain) NSString *string;    // セッター・ゲッターの宣言は1行に
@end

@implementation MyClass
{
    // 実装ファイルの中にインスタンス変数を宣言することができる
}
@synthesize string = _string;
@end

 という感じですかね。
 一つのプロジェクトの中に、いろいろな記法が混在することはよくありません。そこで、今後作るプロジェクトはこのような形にしようと思います。

ヘッダファイル(@interface部)には、プロパティとpublicなメソッドのみ記述する。
ヘッダファイルは他のファイルに読み込んだりして使うので、プロパティとpublicなメソッドのみ記載し、{}は記載しないようにします。
@synthesizeでセッター・ゲッターを作成する。
セッター・ゲッターはできるだけシンプルにした方が良いので、@synthesizeで実装します。
プロパティアクセスにはドット構文を使う。
ドット構文は、メモリ管理も引き受けてくれるので、ドット構文を積極的に利用します。ただし、init系メソッドの中では、インスタンス変数を直接アクセスします。これは、セッター内で他のインスタンス変数相互関係がある場合のトラブルを避けるためです。
@synthesizeでインスタンス変数を定義します。
メソッド内でドット構文(self.〜)を付け忘れ、直接インスタンス変数にアクセスすることを避けます。また、インスタンス変数名は、プロパティ名の前にアンダースコア(_)をつけたものにします。これは、IBOutletをつないだときに自動生成されるインスタンス変数名と同じです。
プロパティ以外のインスタンス変数は実装ファイル(@implementation部)に記述

 いろいろ例外が出てくるでしょうが、ひとまずこんな感じで。

|

« 掃除機を新調 | トップページ | SyntaxHighlighter導入 »

プログラミング」カテゴリの記事

コメント

この情報整理はわかりやすくてvery goodでした。
独学でObjective-Cの勉強をしていて、setter/getterで先に行かなくなってしまい、いろいろ調べていました。参照していたサンプルコードがここで言うObjective-C 1.0時代のものでそこから変わって来ていることを知り、納得でした。propertyはとりあえず使ってみました。あとでまた詳しく勉強したいと思います。ありがとうございました。

投稿: raizan2ame | 2014/01/26 18:03

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/3290/53916492

この記事へのトラックバック一覧です: Xcode ARC時代のマイルール:

« 掃除機を新調 | トップページ | SyntaxHighlighter導入 »