2011-12-28 5 views

答えて

2

ためApple's ObjectiveC refを参照してください。

ゲッターから返されたオブジェクトを変更することは何もありません。これは、プロパティを介してアクセスした後に配列にオブジェクトを追加することができる、読み取り専用のプロパティとして可変配列があった場合も同じです。

1

属性readonlyを持つプロパティのみreadアクセサが生成されることを意味しない(合成した)ので、setRootObjectsArrayControllerようにはセッター、そのオブジェクトが読み取り専用になることを意味するものではありません。

だからこそあなたはまだメッセージを渡すことができます。例えば、あなたが発生したアクセサメソッドを経由してrootObjectsArrayControllerとして新しいアレイコントローラを設定することはできません -

はちょうどあなたがそのプロパティを設定することができないことを意味のみプロパティ定義のために読むの詳細

0

はこれを見て、多くの方法がありますが、私の作品の方法はこれです:

読み取り専用であるプロパティは、舞台裏でそれを行う場合を除き、あなたが(そのプロパティに別のオブジェクトを割り当てることができないことを意味し

、それは別の問題です)。

ただし、可変オブジェクトの場合は内部オブジェクトを変更するようオブジェクトに依頼することができます。

あなたが実際にこれを見たい場合は、あなたが問題のオブジェクトのアドレスを印刷するNSLogを使用することができます:あなたがここで見ることができますどのような

NSArray *contentArray = [NSArray arrayWithObject: @"First array"]; 
NSArray *anotherContentArray = [NSArray arrayWithObject: @"Second array"]; 

[[aClass rootObjectsArrayController] setContent:contentArray]; 

NSLog(@"Controller address: %p, content array address: %p", [aClass rootObjectsArrayController], [[aClass rootObjectsArrayController] content]); 

[[aClass rootObjectsArrayController] setContent:anotherContentArray]; 

NSLog(@"Controller address: %p, content array address: %p", [aClass rootObjectsArrayController], [[aClass rootObjectsArrayController] content]); 

は、コントローラは両方のケースで同じアドレスを持っているということですしたがって、内容が変更された後も同様です。したがって、それはまだ同じインスタンスです。

変更された内容は、コントローラーオブジェクトの内部であり、setContent:メッセージで変更されたコンテンツのアドレスです。

関連する問題