问题
When trying to migrate my current code to ARC, I'm getting errors whenever I pass an NSString as an NSInvocation argument.
Example:
NSInvocation inv = ...;
NSString *one = @"Hello World!";
[inv setArgument:&one atIndex:2];
The error happens when I use the Refactor -> Convert to Objective-C ARC option from the Edit menu. The text is "NSInvocation's setArgument is not safe to be used with an object with ownership other than __unsafe_retained."
How would I get around this?
回答1:
This might work;
__unsafe_unretained NSString *one = @"Hello World";
回答2:
As Joshua Weinberg commented, using NSInvocation is not recommended anymore. If you have up to two parameters you can use performSelector. For three parameters or more, you can use NSObject's -methodForSelector: as explained here.
来源:https://stackoverflow.com/questions/8811498/nsinvocation-and-arc-automatic-reference-counting