Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSINVOATION和ARC(自动参考计数)_Cocoa_Automatic Ref Counting_Nsinvocation - Fatal编程技术网

Cocoa NSINVOATION和ARC(自动参考计数)

Cocoa NSINVOATION和ARC(自动参考计数),cocoa,automatic-ref-counting,nsinvocation,Cocoa,Automatic Ref Counting,Nsinvocation,当尝试将当前代码迁移到ARC时,每当我将NSString作为NSInvocation参数传递时,就会出现错误 例如: NSInvocation inv = ...; NSString *one = @"Hello World!"; [inv setArgument:&one atIndex:2]; 当我使用编辑菜单中的重构->转换为Objective-C圆弧选项时,会发生错误。文本为“NSInvocation的setArgument不安全,无法与所有权为非_safe_reserved的

当尝试将当前代码迁移到ARC时,每当我将NSString作为NSInvocation参数传递时,就会出现错误

例如:

NSInvocation inv = ...;
NSString *one = @"Hello World!";
[inv setArgument:&one atIndex:2];
当我使用编辑菜单中的重构->转换为Objective-C圆弧选项时,会发生错误。文本为“NSInvocation的setArgument不安全,无法与所有权为非_safe_reserved的对象一起使用。”

我该如何解决这个问题?

这可能会奏效

__unsafe_unretained NSString *one = @"Hello World";

正如约书亚·温伯格(Joshua Weinberg)评论的那样,不再推荐使用NSInvocation。 如果最多有两个参数,则可以使用PerformSelect。
对于三个或三个以上的参数,您可以使用NSObject,如前所述。

这将起作用,但在处理此参数时必须非常小心。如果可以避免的话,我建议不要再使用NSInvocation…我使用的是OCMock,它会将NSInvocation对象传递到回调块中。如果不在所有参数上使用uu unsafe u unretained,ARC会非常不高兴。所以谢谢你的提示,神秘的碰撞消失了!