【发布时间】:2014-04-14 04:04:08
【问题描述】:
我刚开始学习 Objective-C,我不确定何时使用点表示法与方括号。我知道有人问过here 类似的问题,但我仍然没有真正理解其中的区别。我读过[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 时会收到错误消息,为什么我只能使用方括号呢?
【问题讨论】:
-
使用
object.number = 4 -
点表示法的等效语句是object.number = 4,而不是object.setNumber = 4。点表示法使用属性本身的名称,而不是setter的名称。
-
只要您有一个采用 0 或 1 个参数的方法,您就可以使用点表示法。您的代码的问题是(为什么会收到警告)您必须不在点表示法中使用
set。这是为什么?编译器从点符号生成一个正常的方法调用。所以如果你写object.number = 4;,编译器会生成[object setNumber:4];。这就是为什么当你写object.setNumber = 4;时它不起作用的原因,因为编译器生成[object setSetNumber:4];并且该方法不存在。
标签: objective-c syntax accessor declared-property