ios obj.var = exp VS [obj var:exp]

时间:2011-11-05 16:22:34

标签: ios objective-c syntax accessor

为什么/何时使用一个而不是另一个?我刚刚遇到一个问题,我在使用另一个时收到警告而没有警告。

示例:

tableView.tableHeaderView = label; // worked
[tableView tableHeaderView:label]; // did not work - "instance method '-tableHeaderView:' not found (return type defaults to 'id')"

混淆

1 个答案:

答案 0 :(得分:6)

setter通常以set为前缀。试试这个:

[tableView setTableHeaderView:label];

也就是说,这个:

tableView.tableHeaderView = label;

转换为:

[tableView setTableHeaderView:label];

使用点表示法时由编译器自动生成。

声明一个objc属性时,此约定也会应用于setter的声明属性名称(默认情况下再次)。

Getters不使用此约定,它们的选择器与声明的属性名称相同(默认情况下):

view = tableView.tableHeaderView;

等于:

view = [tableView tableHeaderView];