Obj-C - Calling&在ivars&中设定值实例方法

时间:2012-07-16 03:32:00

标签: objective-c class methods instance

我不明白我在这里做错了什么,因为我正在按照说明书 - 设置值调用类的方法。我有#imported它,一切都应该没问题。但Xcode抱怨:没有知道“setWeightInKilos和”setHeightInMeters“的类方法选择器。这些实例方法是在”Person“类中实现的,所以我不知道为什么会这样。

    Person *aPerson = [[Person alloc] init]; 
    [Person setWeightInKilos:96];
    [Person setHeightInMeters:1.8];
    float bmi = [Person bodyMassIndex];

3 个答案:

答案 0 :(得分:3)

这些是实例方法,而不是方法。因此,您应该使用变量aPerson的名称在实例上调用它们,而不是类Person的名称:

Person *aPerson = [[Person alloc] init];
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];

通常,前面用-声明的所有方法都会使用该类的实例获取变量;使用+声明的方法采用类名。

如果将heightInMetersweightInKilos声明为属性,还可以使用替代语法:您可以编写

aPerson.weightInKilos = 96;
aPerson.heightInMeters = 1.8;

但这只是针对同一事物的不同语法;在这两种情况下都会调用setter方法。

答案 1 :(得分:2)

看起来您想要设置名为weightheight的实例变量。所以要解决它,请执行以下操作:

Person *aPerson = [[Person alloc] init]; 
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];

答案 2 :(得分:2)

在Objective C中,有两种类型的方法。类方法,它不作用于对象,而是通常执行与该对象类型相关的某些任务。例如,有内置方法来测试网络连接,设备功能等。这些方法总是用“+”符号表示,不能在对象实例上调用,只能在类本身上调用。

另一种类型,实例方法,更常见,并且对实例化或自己创建的对象起作用。这些是您在实现文件中使用“ - ”前缀编写的方法。它们就像你自己写的吸气剂,制定者或方法。

在您的情况下,您需要在Person对象的实例上调用这些setter方法,而不是Person类本身。设置整个班级的高度或重量是不合理的(也不可能),因为每个物体都需要有自己独特的高度和重量。

您需要致电:

Person *aPerson = [[Person alloc] init]; 
[aPerson setWeightInKilos:96];
[aPerson setHeightInMeters:1.8];
float bmi = [aPerson bodyMassIndex];