基本Objective-C语法
两者的区别是什么基本Objective-C语法,objective-c,syntax,Objective C,Syntax,两者的区别是什么 cell.classHour.backgroundColor=[UIColor blackColor]; 及 如您所见,我试图在UITableViewCell中设置UILabel的背景色。 不知为什么,第一种方法对我不起作用。 我一直认为这两种方法都是一样的。这两种方法都指向同一个api。一个可能是操作系统错误,请检查您正在测试的操作系统,并在其他版本中进行测试。tl;医生: 两条线有99.5%的相同结果 […]之间有什么区别 语义上的差异非常微妙。几乎在所有情况下,编译后的
cell.classHour.backgroundColor=[UIColor blackColor];
及
如您所见,我试图在UITableViewCell中设置UILabel的背景色。
不知为什么,第一种方法对我不起作用。
我一直认为这两种方法都是一样的。这两种方法都指向同一个api。一个可能是操作系统错误,请检查您正在测试的操作系统,并在其他版本中进行测试。tl;医生: 两条线有99.5%的相同结果 […]之间有什么区别 语义上的差异非常微妙。几乎在所有情况下,编译后的可执行文件都没有区别 第一行使用属性语法,使编译器查找匹配的属性声明。如果找不到,它将查找匹配的setter声明:
- (void)setBackgroundColor:(UIColor *)value;
编译器在找到匹配的setter时仍将接受点表示法
即使存在(默认)属性声明
@property UIColor *backgroundColor;
。。。编译器只插入对setBackgroundColor:
的调用,因为属性声明意味着存在此名称的setter
我一直认为这两种方法都是一样的
只要在编译时已知接收器的静态类型,点表示法和显式调用setter是相同的。如果接收器的静态类型是id
,编译器将不允许点表示法
当存在具有显式setter名称的属性声明时,这两种样式之间的唯一真正区别在于:
@property (setter=setColor) UIColor *backgroundColor;
在这种(假设的)情况下,编译器实际上会为两行生成不同的代码:setColor:
当使用属性语法时,setBackgroundColor:
当使用显式消息发送时
不知为什么,第一种方法对我不起作用
最后一部分可能不是你问题的原因。我添加它是为了指出消息发送和属性访问的唯一区别
虽然更改getter名称很常见(对于布尔属性),但很少使用显式setter名称。我从未在苹果的框架中看到过这一点。这是正确的答案。唯一缺少的是苹果文档的链接。你可能应该解释第一种方法在哪方面不适合你。
@property (setter=setColor) UIColor *backgroundColor;