我是一名新的iPhone/Objective-C开发人员,因为我正在阅读不同的教程和开源代码,我在理解何时使用方括号"[]"以及何时使用句点时遇到一些问题"."用于访问对象的属性/方法.
例如,这段代码:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
UIColor *backgroundColor = nil;
if (selected){
backgroundColor = [UIColor clearColor];
} else {
backgroundColor = [UIColor whiteColor];
}
self.todoTextLabel.backgroundColor = backgroundColor;
self.todoTextLabel.highlighted = selected;
self.todoTextLabel.opaque = !selected;
self.todoPriorityLabel.backgroundColor = backgroundColor;
self.todoPriorityLabel.highlighted = selected;
self.todoPriorityLabel.opaque = !selected;
}
Run Code Online (Sandbox Code Playgroud)
为什么[UIColor clearColor]得到括号,但todoTextLabel.backgroundColor得到句号?
有人能为我轻松解释一下吗?
Jed*_*ith 28
我在新代码中看到的约定是使用点作为属性,并且总是使用方括号作为消息/选择器(你称之为方法).该点是在Objective-C 2.0中引入的,因此您在网上找到的信息的分歧并非完全出乎意料.
它仍然完全可以使用方括号,仍然(我做):
foo = [myObject backgroundColor];
[myObject setBackgroundColor:foo];
Run Code Online (Sandbox Code Playgroud)
相当于
foo = myObject.backgroundColor;
myObject.backgroundColor = foo;
Run Code Online (Sandbox Code Playgroud)
重申一下,您不应该使用点作为消息,仅使用属性.
要回答您的具体问题,请[UIColor clearColor]使用括号,因为它不是属性; 它实际上是UIColor(+(UIColor)clearColor)的类消息.
你听起来像是来自Java世界,所以这可能会有所帮助:
MyObject *foo = [[MyObject alloc] initWithAwesome:YES]; /* MyObject foo = new MyObject(TRUE); */
[foo doSomethingWithNumber:5 andString:"five"]; /* foo.doSomething(5, "five"); */
MyColor *bar = foo.faceColor; /* MyColor bar = foo.faceColor; */
MyColor *baz = [foo faceColor]; /* MyColor baz = foo.faceColor; */
foo.backColor = bar; /* foo.backColor = bar; */
[foo setUndersideColor:baz]; /* foo.undersideColor = baz; */
Run Code Online (Sandbox Code Playgroud)
"setXXX"和"XXX"消息来自合成的动态属性,是Objective-C的习语."点"只是调用这些方法的简写,大致相当.
编辑:现在我有一些赞成,时间让你们有些人重新考虑> :)
我从不使用圆点,也不应该使用圆点.
我使用点符号表示属性,因为,
for ( Person *person in group.people){ ... }
Run Code Online (Sandbox Code Playgroud)
比阅读更容易阅读
for ( Person *person in [group people]){ ... }
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,通过将您的大脑置于消息发送模式来中断可读性,而在第一种情况下,很明显您正在访问组对象的people属性.
我也会在修改集合时使用它,例如:
[group.people addObject:anotherPerson];
Run Code Online (Sandbox Code Playgroud)
比...更具可读性
[[group people] addObject:anotherPerson];
Run Code Online (Sandbox Code Playgroud)
在这种情况下的重点应该是将对象添加到数组而不是链接两个消息.
| 归档时间: |
|
| 查看次数: |
6936 次 |
| 最近记录: |