gpt4 book ai didi

automatic-ref-counting - __strong和__weak关键字放置-Objective-C

转载 作者:行者123 更新时间:2023-12-04 05:14:23 25 4
gpt4 key购买 nike

编译器似乎对以下两个声明没有问题:

NSObject * __weak weakThing;
__weak NSObject *anotherWeakThing;

两者之间有区别吗?是像 const keyword这样的行为吗?

我问是因为Xcode的警告通常暗示...

SomeDataType * __weak / __strong



...当你搞砸了一些东西。因此,我尝试遵循这种模式,但想知道是否存在任何区别。

最佳答案

不,没有区别。使用const关键字,它可以在声明中应用多种内容。它可以应用于指针,也可以应用于所指向的值。

所有权限定符仅对指向对象的指针有意义。对象本身不能是“强”或“弱”。它是指向强弱对象的指针。 ARC仅在直接应用于指针到对象的类型时才有意义,并且会影响该指针的生存期如何影响对象的生存期。

鉴于所有权限定符可能适用的含义没有任何歧义,ARC规范允许将所有权限定符放置在指针到对象的定义中的任何位置。您的两个示例都同样有效。同样,以下所有含义相同:

NSError * __autoreleasing * someObject;
NSError __autoreleasing ** someObject;
__autoreleasing NSError ** someObject;

请注意,尽管如此,编译器仍会提示:
NSError ** __autoreleasing someObject;

这是因为您已超出了指向对象的指针的定义。您可以将其解析为 (NSError *)* __autoreleasing someObject;。到第二个 *时,您已经定义了指针的类型,因此 __autoreleasing毫无意义。指针类型定义内的任何位置都可以,但是一旦移至指针到指针类型,就意味着要引用其他内容,这不再有意义。

关于automatic-ref-counting - __strong和__weak关键字放置-Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8914546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com