当试图将当前代码迁移到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:如下所述。