这两者之间有什么区别?
[SomeClass.classMethod instanceMethod];
[[SomeClass classMethod] instanceMethod];
classMethod
的 SomeClass
返回一个单例对象,在该对象上调用instanceMethod
。这两种方法都有效,Xcode在执行期间或代码中都不会抱怨。但是,键入SomeClass.classMethod
并不会在下拉菜单中显示任何匹配项,而[SomeClass classMethod]
则会显示。这只是一个缺失的功能还是故意阻止这种做法?
答案 0 :(得分:3)
点语法(SomeClass.classMethod
)只是发送消息([SomeClass classMethod]
)的语法糖。他们做的事情是平等的。
您没有看到属性的完成(点语法)可能是因为您尝试访问属性的对象未正确地转换为具有该属性的类型:
[UIApplication sharedApplication].delegate.myproperty // <-- No completion
[[UIApplication sharedApplication].delegate myproperty] // <-- Completion
这是因为delegate
是id
,因此没有属性(它是泛型类型的对象),因此自动完成不能提示任何内容。后者正在向泛型类型的对象发送消息,因此编译器可以建议您发送大量消息(无论该对象是否支持它们)。