9

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

例子:

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

当我使用 Edit 菜单中的 Refactor -> Convert to Objective-C ARC 选项时会发生错误。文本是“NSInvocation 的 setArgument 不能安全地与拥有 __unsafe_retained 以外的所有权的对象一起使用。”

我将如何解决这个问题?

4

2 回答 2

10

这可能有效;

__unsafe_unretained NSString *one = @"Hello World";
于 2012-01-10T22:37:20.657 回答
5

正如 Joshua Weinberg 评论的那样,不再推荐使用 NSInvocation。如果最多有两个参数,则可以使用 performSelector。对于三个或更多参数,您可以使用 NSObject 的-methodForSelector:解释here

于 2012-08-10T17:57:04.520 回答