2013-03-12 74 views
0

如果一個類的屬性定製的setter:設置屬性的屬性是否調用第一個屬性的setter?

@interface OuterClass : NSObject 
@property InnerClass *obj; 
-(void)setObj:(InnerClass *)obj; 

InnerClass本身有一個屬性:

@property NSString *text; 

,然後我做的:obj.text = @"Hello";意志激活OuterClass對象的setObj:方法?

+1

@AndrewMadsen不重複 – 2013-03-12 22:26:13

+0

@JustinMeiners捍衛你的立場。我看到了你的答案,而另一個鏈接的副本在內容上看起來非常相似。 – CodaFi 2013-03-12 23:10:16

+1

@CodaFi鏈接中的問題與我的第一個答案(BEFORE EDIT下面的部分)基本相同,問的是一個屬性是否是setter和getter。這個問題是詢問當成員屬性發生變化時是否有成員的對象得到通知。關於不同情況下相同功能的不同問題。 – 2013-03-12 23:41:48

回答

3

對不起,我誤解了您的原始問題的背景。

調用someObject.obj.text = @"Hello"不會在外部類上調用-setObj

@properties會生成簡單的setter和getter,並且不會觀察對ivars成員所做的更改。

然而,它會在someObject上撥打-obj

想想這樣吧。鑑於someObject.obj.text =someObject.obj部分使用someObject的獲得者返回obj。然後obj.text =部分將-setText發送到obj獲得者的結果。

之前編輯:

是,一個@property自動生成用於一個的ivar setter和getter。

設置obj.text = @"hello"調用-setText:方法。

和訪問屬性x = obj.text調用-text方法。

確保您是否重寫setter或getter,以確保方法與屬性完全匹配。

+0

是的,我正在使用生成的setter(自定義)。我想知道是否設置內部對象屬性將激活外部對象的setObj:方法,因爲它的屬性已被修改。我知道我不是很好地解釋自己。 – 2013-03-12 21:59:14

4

不,setObj:不會被調用,因爲您沒有設置屬性。你是得到該屬性,然後設置結果的屬性之一。這相當於[[something obj] setText:@"Hello"]