ede*_*y05 8 objective-c-2.0 automatic-ref-counting
编译器似乎对以下两个声明没有问题:
NSObject * __weak weakThing;
__weak NSObject *anotherWeakThing;
Run Code Online (Sandbox Code Playgroud)
这两者有区别吗?行为是否像const关键字一样?
我问,因为Xcode的警告通常建议......
SomeDataType*__weak/__strong
......当你搞砸了什么.所以我试图遵循这种模式,但想知道是否存在差异.
BJ *_*mer 13
不,没有区别.使用const关键字,可以在声明中应用多种内容; 它可以应用于指针,或者它可以应用于指向的值.
所有权限定符仅对指向对象的指针有意义.对象本身不能"强"或"弱"; 它是指向强弱对象的指针.ARC仅在直接应用于指针到对象类型时才有意义,并且会影响指针的生命周期将如何影响对象的生命周期.
鉴于所有权限定符可以应用的内容从不存在任何歧义,ARC规范允许将所有权限定符放置在指向对象的指针的任何位置.您的两个示例都同样有效.同样,以下所有意味着同样的事情:
NSError * __autoreleasing * someObject;
NSError __autoreleasing ** someObject;
__autoreleasing NSError ** someObject;
Run Code Online (Sandbox Code Playgroud)
请注意,编译器会抱怨这个,但是:
NSError ** __autoreleasing someObject;
Run Code Online (Sandbox Code Playgroud)
这是因为你已经超越了指向对象的定义.你可以解析那个(NSError *)* __autoreleasing someObject;.当你到达第二个时*,你已经定义了指针的类型,所以__autoreleasing没有任何意义.指针类型定义中的任何位置都可以,但是一旦你移动到指针指针类型,那么你指的是其他东西,它就没有意义了.
还有就是如果你有一个差异
__weak NSObject *someWeakThing, *someSupposedlyButNotReallyWeakThing;
Run Code Online (Sandbox Code Playgroud)
因为__weak只会混淆地应用于第一个变量.(这对新秀来说也是一个类似的错误
NSObject* one, two;
Run Code Online (Sandbox Code Playgroud)
这当然不会像"预期的"那样工作.
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |