スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]selfが有るのと無いのとで違うことは何なのか

selfとは己のインスタンスのことを表す、すなわち自身のことです。
しかし自身を表すのはわかりましたが、具体的にはどういうときにはつける必要があったり、必要が無なかったりと言うところが解りません。

今回はsetterとgetterを自身で作成する例を紹介します。

例えば
//Hoge.h
@interface Hoge{
BOOL check;
}
@property (nonatomic,assign) BOOL check;
-(id)init;
-(void)dealloc;

//Hoge.m
@implementation Hoge
//@synthesize check; //自作でセッターとゲッターを付ける際は
//@dynamic check; //どちらの宣言も不要です。

//お決まり文句
-(id)init{
[super init];
if(self){
/*初期化コードを記述しましょう*/
self.check = NO;
}
}
-(void)dealloc{
[super dealloc];
}

#pragma mark - getter/setter -
-(BOOL)check{
return check;
}
-(void)setCheck:(BOOL)newCheck{
check = newCheck;
}



このコードから見えてくる違いとは何でしょうか?

・・・

このコードでは初期化時に
//init
self.check = NO;

としてセットを行っています。

一方セッターとゲッターでは
//getter
return check;
//setter
check = newCheck;

としています。

このself.checkとcheckにはかなり大きな差があるようです。

例えば初期化時の「self.check
こいつのselfを外してしまうと、setter/getterへアクセスされません。
一方でsetter/getterの「check
こいつにselfを付けてしまうと、再びsetter/getterの呼び出しを行いリダイレクトループしてしまいます。

すなわち、インスタンスへメッセージを送る機能こそがselfの役割ということです。

つける必要の有る無しを良く考える必要があります。
「selfがあっても、無くても一緒だ。」と思っていると思わぬ罠に引っ掛かってしまいます。

参考URL:Objective-C 2.0 プロパティのsetter/getterを自前で実装
このエントリーをはてなブックマークに追加

tag : iOS self self.view 有無 意味

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。