设置Objective-C实例变量值

时间:2012-02-02 13:51:11

标签: objective-c instance-variables

我有以下代码:

@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 个答案:

答案 0 :(得分:2)

setNumerator方法用于告诉Fraction对象它应该在名为numerator的变量中保存什么值。如同“在这里,分数先生,请使用值 n 作为分子。”在此方法的实现中,代码必须处理两个不同的概念:包含新值的参数变量 n ,以及必须更改为的实例变量 numerator n 中的值;因此需要两个不同的名字。这条线

numerator = n;

字面意思是“将 n 中的数字复制到变量分子中。”

请记住,交易有两半。说我是一个分数对象,你想让我把我的分子设置为4.你说“将你的分子设置为4,或 setNumerator(4)”,这很好,因为你是人类,你可以选择你想要的任何数字。

但作为一个卑微的Objective-C对象,我的所有代码都是在过去的某个时间写的;它是在 4 值之前写的,甚至是你眼中的闪烁。所以 setNumerator()的代码必须是通用的;它必须写成“将分子设置为人类想要的任何值 - 称之为 n ”。请记住,我的实际变量 numerator 对您来说是隐藏的;所有你能做的就是调用我的方法,由我来设置变量。

这就是为什么必须编写该方法以使用抽象名称 - n - 作为值,因为在编写方法时,该值是未知的。

答案 1 :(得分:0)

我认为您可能正在寻找的概念称为属性。 Take a look here以及herehere。属性将允许您设置成员值,而无需命名参数或调用方法。您只需为该属性指定一个值。

通过函数调用,您必须为要传递给函数的参数命名,以便将其分配给类成员。