【问题标题】:What does "*__strong*" mean?“*__strong*”是什么意思?
【发布时间】:2016-08-20 10:00:03
【问题描述】:

有一种方法:

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

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

【问题讨论】:

标签: objective-c


【解决方案1】:

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

__strong 与您可能已经知道的__weak 相反。这意味着我们在这里谈论的是一个强有力的参考。当我们持有该引用时,该对象不会被释放。

我们还需要知道写__strong Type *varName 在技术上是错误的(尽管它有效并且几乎每个人都使用它)。正确的语法是Type * __strong varName

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

请查看相关问题: NSError and __autoreleasing 和官方文档: Transitioning to ARC

【讨论】:

    【解决方案2】:

    虽然这个问题已经有了答案,但人们需要知道确切的词或最简单的描述。

    __strong

    只要有指向它的强指针,对象就会保持“活动”。

    当一个对象被分配给该指针时,只要该指针引用它,它就会被保留

    当您想确保您所引用的对象在您仍在使用时不会被释放。

    上面的点是__strong的意思。

    The Best Example of __strong from BJ Homer

    这里的狗是一个对象,狗想逃跑(被释放)。

    强指针就像狗的皮带。只要你有 拴在狗身上的皮带,狗不会逃跑。如果五个人 将他们的皮带拴在一只狗上,(五个强指针指向一个物体), 那么在所有五根皮带都松开之前,狗不会逃跑。

    另一方面,弱指针就像小孩子指着 狗说:“看!一条狗!”只要狗还在 皮带,小孩子仍然可以看到狗,他们仍然会指向 给它。但是,只要松开所有的皮带,狗就会跑 不管有多少小孩指向它。

    只要最后一个强指针(皮带)不再指向 对象,对象将被释放,所有弱指针都将被释放 归零。

    两个星号

    它是指向指针的指针

    如果你使用指向指针的指针,你必须像 Sulthan 所说的那样当一个对象从该方法返回时,必须有来自 ARC 的释放调用才能正确释放该对象。 所以我们要知道指针的使用方式

    Here is the way for Handling pointer to pointer ownership issues

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多