有一种方法:
- (void)doSmth:(NSString *__strong*)str {
NSLog(@"%@", *str);
}
当 __ strong 跟随方法参数的类时,它是什么意思?为什么有两个星号?
答案 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