Objective-C 类方法:点语法和​​“类属性”

Posted

技术标签:

【中文标题】Objective-C 类方法:点语法和​​“类属性”【英文标题】:Objective-C class method: dot syntax and 'class property' 【发布时间】:2013-01-07 10:10:38 【问题描述】:

在为 ios 编程时,我遇到了以下场景:

我有一个带有类方法+ (Store*)sharedStore 的单例类。当我想在单例对象上调用实例方法时,我可以使用点语法来获取该对象,即[Store.sharedStore foo]

但是,Xcode 在输入点后不会自动完成“sharedStore”。另一方面,[[Store sharedStore] foo] 自动完成的!

有没有“类属性”这样的东西?如果我可以将sharedStore 变成类的只读属性,点语法将获得自动补全。

更一般地说,Xcode 根本不会在点语法后自动完成任何不是属性的东西,即使这是调用(getter)方法的有效方式。

感谢任何解决方案、解决方法或信息。

【问题讨论】:

是允许的,所以可能是 Xcode 的 bug。见***.com/questions/2375943/… 如果你这样做,它会起作用:[[Store class].sharedStore foo]; 【参考方案1】:

目前,就类 getter 而言,我们似乎必须:

使用此语法在没有自动完成的情况下Store.sharedStore;或 改用括号语法:[Store sharedStore]

我最近没有尝试过其他编辑器(例如 AppCode)。另一个编辑器可能自动更正类 getter 上的点语法。

关于什么是正确、合乎逻辑或可读性的观点各不相同。

【讨论】:

+1 "关于什么是正确、合乎逻辑或可读性的观点各不相同。"【参考方案2】:

点语法用于访问属性。有些人将它与返回值且不获取参数的实例方法一起使用,但这是一种不好的方法。所有其他情况都是错误的。

【讨论】:

您能否解释一下为什么或根据谁是一种不好的方法?毕竟,这样的方法具有“吸气剂”的作用。属性准确地创建了这样的方法。除了创建 getter [和 setter] 方法的简写之外,Obj-C 属性还有什么? 出于同样的原因,变量或实例变量的名称总是以小写或''开头,同样的原因所有类的名称都以大写开头,有时带有前缀,同样的原因,宏用大写字母书写并用''分隔,同样的原因全局变量有时以'g'开头,常量以'k'开头。方便。点表示法让您一目了然地知道方法何时是属性的 getter 或 setter。这就是 Apple 使用它并教授使用它的方式。您可以始终使用点表示法,但这种方法总是会更糟。问候。 根据documentation,您是正确的。根据 Xcode,您的解释过于局限。最好,Apple 应该修复文档或在 Xcode 中修复它。就个人而言,我希望他们修复文档:我相信UIApplication.sharedApplication,根据我的评论here,是正确的并且是有意义的。当然,调用像 NSArray.array 这样的工厂方法是不合逻辑的。

以上是关于Objective-C 类方法:点语法和​​“类属性”的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C语法汇总

Objective-C中,类方法的getter和setter可以用点运算符吗?

java修饰符访问控制

java基础--访问修饰符之我见

Objective-C

[Objective-C]简单实现一个OC类