@synthesizeの後にイコールなんとかって何?
人様のコードを見るというのはホント勉強になりますね。
Study CoreData 0 序章 ~日本語で覚えなくっても良いじゃんね~ « Everything was born from Love
↑今はこのシリーズで CoreDataってものがどんなのか見てたりします。
ところが、 CoreData以前に基本的なところで躓いててなかなか進みません、、、
そんなところをメモしておきます。
出てくるサンプルコードでよくわからなかったのが、
なんだこりゃ?
ってことで調べてみたところ、こんな記事が。↓
【コラム】ダイナミックObjective-C (102) プロパティ(2) - プロパティの宣言 | エンタープライズ | マイコミジャーナル
フーン、、、
とりあえず、試してみた。
Personクラスってベタなクラスを作りました。
ヘッダー部分(Person.h)はこんな感じ。
実装部分(Person.m)はこんな感じ。
これを使うクラスに以下のように記述します。

↑上部が(1)で下部が(2)です。
ほれ、(2)だとプロパティ"myName"をTaroとセットしたのに、 Personクラス内部のインスタンス(_myName)も、Taroを指している!!!
こういうことかっ!
ちなみに、逆にPersonクラス内部で_myNameをたとえば"Jiro"に変更しても、それを使う側からプロパティ(myName)へアクセスするとちゃんと"Jiro"になるんですよ!
ほー!
機能はわかった。
ただ、この@synthesizeでプロパティとインスタンス変数を関連づける技(?)が何に役立つのかまだピンと来ませんが、とりあえず覚えておこうっと。
Study CoreData 0 序章 ~日本語で覚えなくっても良いじゃんね~ « Everything was born from Love
↑今はこのシリーズで CoreDataってものがどんなのか見てたりします。
ところが、 CoreData以前に基本的なところで躓いててなかなか進みません、、、
そんなところをメモしておきます。
出てくるサンプルコードでよくわからなかったのが、
@synthesize fetchedResultsController=fetchedResultsController_;というように@synthesizeのプロパティ名の後に、イコールごにょごにょって続く形。
なんだこりゃ?
ってことで調べてみたところ、こんな記事が。↓
【コラム】ダイナミックObjective-C (102) プロパティ(2) - プロパティの宣言 | エンタープライズ | マイコミジャーナル
プロパティ名の後に、インスタンス変数名を指定してやればいい。これで、プロパティを任意のインスタンス変数と関連づけることができる。
フーン、、、
とりあえず、試してみた。
Personクラスってベタなクラスを作りました。
ヘッダー部分(Person.h)はこんな感じ。
@interface Person : NSObject { NSString *_myName; } @property(nonatomic, retain) NSString *myName; -(void)sayHello; @endプロパティにmyName、文字列型のインスタンス変数名に_myName、 sayHelloってメソッドを持ちますよってことで。
実装部分(Person.m)はこんな感じ。
@implementation Person @synthesize myName;//(1) //@synthesize myName = _myName;//(2) -(void)sayHello{ NSLog(@"Hello, I'm %@! (_myName)",_myName); NSLog(@"Hello, I'm %@! (self.myName)",self.myName); } @endsynthesizeでプロパティ名のみを(1)、プロパティ名の後にイコールとインスタンス名を記述したのが(2)としますね。
これを使うクラスに以下のように記述します。
Person *he = [[Person alloc] init];//初期化 [he sayHello];//メソッド実行 he.myName = @"Taro";//ここで"Taro"をセットする NSLog(@"--- set Taro ---"); [he sayHello];//もう一度メソッド実行実行結果の比較がこれ↓

↑上部が(1)で下部が(2)です。
ほれ、(2)だとプロパティ"myName"をTaroとセットしたのに、 Personクラス内部のインスタンス(_myName)も、Taroを指している!!!
こういうことかっ!
ちなみに、逆にPersonクラス内部で_myNameをたとえば"Jiro"に変更しても、それを使う側からプロパティ(myName)へアクセスするとちゃんと"Jiro"になるんですよ!
ほー!
機能はわかった。
ただ、この@synthesizeでプロパティとインスタンス変数を関連づける技(?)が何に役立つのかまだピンと来ませんが、とりあえず覚えておこうっと。
スポンサーサイト
<< プロパティをこんな風に設定できるとは知らなかったが、、、 TopPage プロパティなのにリファレンスのメソッドを探してしまう >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/422-bde34e34
https://ringsbell.blog.fc2.com/tb.php/422-bde34e34