“*__strong*”是什么意思?

4

有一个方法:

- (void)doSmth:(NSString *__strong*)str {
    NSLog(@"%@", *str);
}

当一个方法参数的类后面跟着__strong是什么意思?为什么有两个星号?


相关问题:https://dev59.com/EmYr5IYBdhLWcg3wi63d - Sulthan
2个回答

7

两个星号表示这是一个指向指针的指针。

__strong__weak 的反义词,你可能已经知道了。它意味着我们在谈论一个强引用。只要我们保持对该引用的持有,对象就不会被释放。

此外,我们需要知道编写 __strong Type *varName 在技术上是错误的(尽管它可以工作,并且几乎每个人都使用它)。正确的语法是 Type * __strong varName

你的语法是指向 NSString 的强引用的指针。这意味着当一个对象从方法中返回时,必须有一个 release 调用来正确地释放该对象。

请参见相关问题: NSError 和 __autoreleasing 和官方文档: 过渡到 ARC


1
尽管这个问题已经被回答,但人们需要知道确切的词语或最简单的描述。
__strong
一个对象只要有强引用指向它,就会一直“存活”。 当一个对象被分配给该指针时,只要该指针引用它,它就会被保留。 当您希望确保您正在引用的对象在您仍在使用它时不会被释放时。
以上是__strong的含义。 BJ Homer提供的最佳__strong示例 这里的dog是一个对象,而这只狗想要逃跑(被释放/deallocated)。 强指针就像是一条绳索系在狗身上。只要绳索系在狗身上,狗就不会逃跑。 如果五个人将他们的绳索都系在同一只狗身上(即一个对象有五个强指针),那么只有在所有五个绳索都被解除之前,狗才不会逃跑。 另一方面,弱指针就像是小孩指着狗说:“看,一只狗!”只要狗还在绳索上,小孩们就能看到狗,并且还会继续指着它。但是一旦所有绳索都被解除,无论有多少小孩指着它,狗都会逃跑。 一旦最后一个强指针(绳索)不再指向一个对象,则该对象将被释放,并且所有弱指针将被清零。
**两个星号**
这是指针的指针。
如果您使用指向指针的方式,就必须像Sulthan所说的那样做。当一个对象从方法中返回时,必须有一个释放调用来正确地释放该对象。因此,我们必须知道如何使用指向指针的方式。 这里是处理指向指针所有权问题的方法

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接