NSInvocation和ARC(自动参考计数)



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

示例:

NSInvocation inv = ...;
NSString *one = @"Hello World!";
[inv setArgument:&one atIndex:2];

当我使用Edit菜单中的Refactor->Convert to Objective-C ARC选项时,就会发生错误。文本为"NSInvocation的setArgument不安全,不能与所有权不是__unsaf_eretained的对象一起使用。"

我该怎么解决这个问题?

这可能会起作用;

__unsafe_unretained NSString *one = @"Hello World";

正如Joshua Weinberg所评论的,不再建议使用NSInvocation。如果您最多有两个参数,则可以使用performSelector。对于三个或更多参数,可以使用NSObject的-methodForSelector:如下所述。

最新更新