什么是* __强*意味着什么?

时间:2016-08-20 10:00:04

标签: objective-c

有一种方法:

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

__ strong 跟随方法参数的类时,它是什么意思?为什么有两个星号?

2 个答案:

答案 0 :(得分:6)

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

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

此外,我们需要知道写__strong Type *varName在技术上是错误的(虽然它有效但几乎每个人都使用它)。正确的语法是Type * __strong varName

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

请参阅相关问题: NSError and __autoreleasing和官方文件: Transitioning to ARC

答案 1 :(得分:1)

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

__ strong

  

只要存在指向它的强指针,对象就会保持“活着”。

     

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

     

当您想要确保在您使用它时不会取消分配您引用的对象。

以上几点是__strong的含义。

The Best Example of __strong from BJ Homer

  

这里的狗是一个物体,而狗想要逃跑(被解除分配)。

     

强壮的指针就像是狗的皮带。只要你有   皮带附着在狗身上,狗不会逃跑。如果五个人   将他们的皮带系在一只狗上,(一个物体的五个强指针),   然后狗不会逃跑,直到所有五个皮带脱落。

     另一方面,弱点就像小孩子指着的那样   狗,说“看!一只狗!”只要狗还在上   皮带,小孩子仍然可以看到狗,他们仍然会指出   它。然而,一旦所有的皮带脱落,狗就跑了   不管有多少小孩指着它。

     

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

两个星号

  

它指向指针

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

Here is the way for Handling pointer to pointer ownership issues