如果有人好奇:1-4 人都做同样的事情。具体来说,他们使用 getter 和 setter。5 是直接访问——它不使用 getter/setter。
我的建议是接受点表示法是消息传递,而消息传递几乎总是您与对象交互的方式,所以只需使用点表示法即可。
选择器匹配可以用点表示法更强:
// ARC
NSURL * url = nil;
NSObject<NSFilePresenter>* presenter = nil;
url = [presenter presentedItemURL]; // << match
url = presenter.presentedItemURL; // << property matched to presenter's method
NSObject * object = nil;
url = object.presentedItemURL; // << ERROR object/selector mismatch
url = [object presentedItemURL]; // << ERROR object/selector mismatch
id untyped = nil;
url = untyped.presentedItemURL; // << ERROR object/selector mismatch (Good compiler)
url = [untyped presentedItemURL]; // << OOPS, vague selector matched
因此,您通过使用点符号引入的增强类型安全性可以节省您的维护以及未来的错误。
您不太可能将它与成员访问混淆,除非您认为您正在处理一个结构(或 C++ 类),并且有许多编译器检查会警告您直接 ivar 访问。
应避免直接访问(例如_myLabel.prop
和)(除了少数极端情况)。self->_myLabel.prop
这条规则的例外是在部分初始化的状态下——在你的初始化器中-dealloc
,你应该使用直接访问,并且你不应该使用访问器方法。
当然,还有其他地方读起来不错:
return array.count; <<< OK - clear, although not strictly a @property
......你可以走得太远:
NSString * string = NSString.alloc.init; <<< GROSS! you will not make friends using this