0

我刚刚开始学习 Objective-C,但我不确定何时使用点表示法与方括号。我知道这里有人问过类似的问题,但我仍然没有真正理解其中的区别。我已经读过[myObject doSomething]并且myObject.doSomething是等效的。但我不确定的是,当我@property用来生成一个方法时,它会自动生成一个我只能与方括号一起使用的 setter 方法。

// MyClass.h

@interface MyClass : NSObject
@property int number; 


// main.m
MyClass *object = [[MyClass alloc] init];
[object setNumber:3];
object.setNumber = 4; // Property 'setNumber' not found

为什么我在写作时会收到错误消息object.setNumber = 4,为什么我只能使用方括号?

4

2 回答 2

0

您会收到该错误,因为该属性称为numbernot setNumber。在 OOP 语言中,创建使用“setter”和“getter”访问对象数据的方法很常见。Objective-C 2.0 中的一个属性综合了这个过程并自动生成了 setter 和 getter。如果您进入 MyClass.m 并输入- setN,您将看到 Xcode 建议的 setNumber。这是因为您可以自己实现 setter 和 getter 来自定义它们的行为,或者保留简单地设置值或获取值的默认行为。

此外,属性会自动生成变量声明,_variableName例如,您的属性的默认行为是:

- (void) setNumber:(int)number {
    _number = number
}

- (int) getNumber {
    return _number;
}

确定是否应该使用其中一个实际上归结为一致性。为了确保团队的一致性,应该有一个风格指南。以纽约时报为例。它们将点符号严格限制为非属性方法(即 setter 和 getter)的属性和括号。

于 2014-04-14T04:07:28.033 回答
-1

你混淆了方法和属性。

当您创建一个属性时,是的,它会创建一个名为 setVARIABLE 的 setter 方法。

调用方法的唯一方法是使用方括号表示法。IE [object setNumber:3];(除非你有 0 或 1 个参数,谢谢 HAS)

您要做的是使用属性名称,而不是 setter(或 getter)方法。

[object number];

这将返回数字的值。通过括号表示法访问属性时,您无法读取属性,它只是只读的(仅访问 get 函数)。

object.number = 3;

这就是您使用点表示法设置属性编号的方式。

当您编写时,object.setNumber = 3;您将 setNumber 视为一个属性,但事实并非如此,它是一种方法。

回顾一下

  1. 方法只能通过括号表示法使用,而不是点表示法[object setNumber:3];(除非你有 0 或 1 个参数)
  2. 您只能在通过括号表示法访问属性时读取它[object number]; //returns the value of number
  3. 您可以在通过点表示法使用它时读取和写入属性object.number = 3;
于 2014-04-14T04:12:48.837 回答