5

本文档中,在标有“变量限定符”的部分下,Apple 说:

你应该正确地装饰变量。在对象变量声明中使用限定符时,正确的格式是:

ClassName * qualifier variableName;

例如:

MyClass * __weak myWeakReference;
MyClass * __unsafe_unretained myUnsafeReference;

其他变体在技术上是不正确的,但被编译器“原谅”了。要了解该问题,请参阅http://cdecl.org/

查看 cdecl.org 并没有澄清任何事情。谁能解释他们所指的“问题”是什么?换句话说,帮助我说服其他人这实际上很重要,而不仅仅是“因为这个自述文件是这样说的”。

4

1 回答 1

6

看看我的例子,把乱码翻译成英文

众所周知,

ClassName * const varName; //varName is a constant pointer to ClassName

有不同的含义

const ClassName * varName; //varName is a pointer to constant ClassName

或者

ClassName const * varName; //varName is a pointer to constant ClassName

以同样的方式这个声明

ClassName * __weak varName; //varName is a weak pointer to ClassName

和这个宣言

__weak ClassName * varName; //varName is a pointer to weak?? ClassName??

非常不同。但是,第二个的含义很清楚(尽管它在技术上是不正确的)并且可以被编译器“原谅”。

Foo * __autoreleasing *一旦您开始使用指向指针的指针(例如),正确性就更加重要了。

我假设他们想保护初学者免受 C/C++ 声明乱码的影响。一开始就有预选赛似乎更自然。

于 2014-05-20T17:42:17.417 回答