【问题标题】:ios obj.var = exp VS [obj var:exp]ios obj.var = exp VS [obj var:exp]
【发布时间】:2011-11-05 16:22:34
【问题描述】:
为什么/什么时候使用其中一种?我刚刚遇到了一个问题,我在使用一个时收到警告,而在使用另一个时没有警告。
示例:
tableView.tableHeaderView = label; // worked
[tableView tableHeaderView:label]; // did not work - "instance method '-tableHeaderView:' not found (return type defaults to 'id')"
困惑
【问题讨论】:
标签:
ios
objective-c
syntax
accessor
【解决方案1】:
setter 通常以set 为前缀。试试这个:
[tableView setTableHeaderView:label];
也就是说,这个:
tableView.tableHeaderView = label;
转换为:
[tableView setTableHeaderView:label];
在使用点表示法时由编译器自动生成。
当声明一个 objc 属性时,这个约定也适用于 setter 声明的属性名称(同样,默认情况下)。
Getter 不使用此约定,它们的选择器与声明的属性名称相同(默认情况下):
view = tableView.tableHeaderView;
等于:
view = [tableView tableHeaderView];