概要
Objective-Cでは、プロパティを使って変数を宣言すると、その変数へのアクセス方法が2種類あると思うのですが、実際どっちのほうがアクセス処理が速いのかを簡単なプログラムで計測してみました。
アクセス方法
• 直接インスタンス変数にアクセスする。
• プロパティ経由(ゲッタ)経由でアクセスする。
テスト内容
.hファイルで宣言したNSString型の変数に.m内で、同じ型の変数に代入する処理を1000回する間の処理速度を計測する。
実行環境
• Mac Book Air
OS X version10.9.2
プロセッサ : 1.8GHz Intel Core i7
メモリ : 4GB
• Xcode
version 5.1
プログラム
以下に計測に使ったコードです。
hoge.h
@property(nonatomic,copy)NSString *str;
hoge.m
NSString *temp = @"";
_str = @"hoge";
NSDate *startDate = [NSDate date];
for(int i = 0;i<1000;i++){
temp = _str; //変数に直接アクセス
//temp = self.str; //プロパティ経由でアクセス
}
NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:startDate];
NSLog(@"time is %lf (sec)", interval);
実行結果
変数に直接アクセスしたほうが約6倍速いという結果になりました。
変数の値を参照するだけであれば、直接アクセスしたほうが良さそうです。