NSInvocation和ARC(自动引用计数)

9

当我尝试将我的代码迁移到ARC时,每当我将一个NSString作为NSInvocation参数传递时,我会遇到错误。

示例:

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

当我使用编辑菜单中的Refactor -> Convert to Objective-C ARC选项时,会出现以下错误:“NSInvocation的setArgument不能安全地用于除__unsafe_retained以外的所有权对象”。我该如何解决这个问题?
2个回答

10
这可能有效;
__unsafe_unretained NSString *one = @"Hello World";

3
这个方法可以运行,但是你在内存处理方面必须非常小心。如果可以避免的话,我建议不再使用NSInvocation... - Joshua Weinberg
1
我正在使用OCMock,并将一个NSInvocation对象传递到其回调块中。如果您没有在所有参数上使用__unsafe_unretained,ARC会非常不高兴。因此,感谢提示,神秘的崩溃已经消失了! - phatmann

5

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接