我是一名新的 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;
}
为什么[UIColor clearColor]
得到括号,但是todoTextLabel.backgroundColor
得到经期了吗?
有人能为我简单地解释一下吗?
我在新代码中看到的约定是使用点表示属性,并且always使用方括号表示消息/选择器(您所说的methods)。该点是在 Objective-C 2.0 中引入的,因此您在网上找到的信息不一致并不完全出乎意料。
也完全可以对所有内容使用方括号,仍然(and I do):
foo = [myObject backgroundColor];
[myObject setBackgroundColor:foo];
相当于
foo = myObject.backgroundColor;
myObject.backgroundColor = foo;
重申一下,您不应该将点用于消息,而只能用于属性。
要回答您的具体问题,[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; */
“setXXX”和“XXX”消息来自合成的动态属性,是 Objective-C 的习惯用法。 “点”只是调用这些方法的简写,并且大致等效。
EDIT:现在我已经获得了一些赞成票,是时候让你们中的一些人重新考虑了 >:)
我从不使用点,你也不应该。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)