Cocoa NSINVOATION和ARC(自动参考计数)
当尝试将当前代码迁移到ARC时,每当我将NSString作为NSInvocation参数传递时,就会出现错误 例如: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的
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会非常不高兴。所以谢谢你的提示,神秘的碰撞消失了!