i_a*_*orf 5 syntax objective-c qualifiers
在本文档中,在标记为"可变限定符"的部分下,Apple说:
你应该正确装饰变量.在对象变量声明中使用限定符时,正确的格式为:
ClassName * qualifier variableName;
Run Code Online (Sandbox Code Playgroud)
例如:
MyClass * __weak myWeakReference;
MyClass * __unsafe_unretained myUnsafeReference;
Run Code Online (Sandbox Code Playgroud)
其他变体在技术上是不正确的,但编译器"原谅"了.要了解此问题,请访问http://cdecl.org/.
查看cdecl.org并未澄清任何内容.任何人都可以解释他们所指的"问题"是什么?换句话说,帮助我说服别人,这实际上不仅仅是因为"因为这篇自述文件是这么说的".
查看我的例子,带有乱码到英文的翻译
众所周知
ClassName * const varName; //varName is a constant pointer to ClassName
Run Code Online (Sandbox Code Playgroud)
有不同的意义
const ClassName * varName; //varName is a pointer to constant ClassName
Run Code Online (Sandbox Code Playgroud)
要么
ClassName const * varName; //varName is a pointer to constant ClassName
Run Code Online (Sandbox Code Playgroud)
以同样的方式宣言
ClassName * __weak varName; //varName is a weak pointer to ClassName
Run Code Online (Sandbox Code Playgroud)
和这个宣言
__weak ClassName * varName; //varName is a pointer to weak?? ClassName??
Run Code Online (Sandbox Code Playgroud)
非常不同.但是,第二个的含义是明确的(虽然它在技术上是不正确的)并且它可以被编译器"原谅".
一旦你开始使用指针指针(例如Foo * __autoreleasing *),正确性就更重要了.
我假设他们想要保护初学者开发人员免受C/C++声明乱码.在开始时使用限定符似乎更自然.