2012-02-02 152 views
1

我有以下代碼:設置Objective-C的實例變量值

@implementation Fraction 
{ 
     int numerator; 
     int denominator; 
} 

    -(void) setNumerator: (int) n 
{ 
    numerator = n; 
} 
    -(void) setDenominator: (int) d 
{ 
    denominator = d; 
} 
@end 

我想知道爲什麼你必須有既爲分子「n」和「分子」?例如,爲什麼你就不能設置

-(void) setNumerator: (int) numerator 

爲並列於:

-(void) setNumerator: (int) n 
    numerator = n; 
} 

很抱歉,如果這是這樣一個基本的問題,但我從沒有編程經驗的起點開始。

回答

2

方法用於告訴Fraction對象它應該在名爲numerator的變量中保留什麼值。如「在這裏,先生分數,請使用值n作爲分子。」在實施此方法時,代碼必須處理兩個不同的概念:包含新值的參數變量n以及必須更改爲的值的實例變量分子 n;因此需要兩個不同的名字。行

numerator = n; 

字面意思是「複製Ñ數入變量分子」。

請記住,交易有兩個半部分。假設我是Fraction對象,並且你希望我將分子設置爲4.你說「將你的分子設置爲4,或者setNumerator(4)」,這很好,因爲你是人類,選擇你想要的號碼。但是作爲一個低級的Objective-C對象,我所有的代碼都是在過去一段時間寫出來的;它寫在之前值甚至在你的眼睛閃爍。所以setNumerator()的代碼必須是通用的;它必須被寫爲「將分子設置爲人們想要的任何值 - 稱之爲n」。請記住,我的實際變量分子對您是隱藏的;你所能做的就是調用我的方法,這取決於我設置變量。

這就是爲什麼該方法必須寫成使用抽象名稱 - n - 對於該值,因爲在寫入方法時,值是未知的。

+0

哇,這很快謝謝你。但我仍然不清楚爲什麼需要一個參數變量和一個實例變量。由於分子已被聲明爲(int),並且在執行給(int)一個類似於4的值的方法時,爲什麼我們需要首先給出n的值4並將其傳遞給分子? – CloudDweller 2012-02-02 14:04:52

+0

我給答案增加了很多,希望能幫助到你。 – 2012-02-02 14:12:12

+0

我有點得到你的意思,我知道我是愚蠢的,但我仍然不是100%,爲什麼需要兩個。我們將分子聲明爲(int),將n聲明爲(int),因此程序知道將使用int。爲什麼分子ivar被隱藏,因爲我們沒有在界面中顯示它? – CloudDweller 2012-02-02 14:18:52

0

我認爲你可能正在尋找的概念被稱爲屬性。 Take a look hereherehere。屬性將允許您設置成員值而不必命名參數或調用方法。您只需爲該屬性分配一個值即可。

通過函數調用,您必須命名您傳遞給函數的參數,以便您可以將其分配給類成員。

+0

感謝您花時間回答我的問題。我現在已經理解了這個概念。 – CloudDweller 2012-02-02 15:22:20