当我尝试将当前代码迁移到ARC时,每当我将NSString作为NSInvocation参数传递时,我都会收到错误。
示例:
NSInvocation inv = ...;
NSString *one = @"Hello World!";
[inv setArgument:&one atIndex:2];
当我使用Refactor时发生错误 - >从“编辑”菜单转换为“Objective-C ARC”选项。文本是“NSInvocation的setArgument与安全性不同于__unsafe_retained的对象一起使用是不安全的。”
我如何解决这个问题?
答案 0 :(得分:10)
这可能有用;
__unsafe_unretained NSString *one = @"Hello World";
答案 1 :(得分:5)
正如Joshua Weinberg评论的那样,不再推荐使用NSInvocation。 如果您有最多两个参数,则可以使用performSelector。 对于三个或更多参数,您可以按照-methodForSelector:的说明使用NSObject的here。