objc-nsinvocation-argument-lifetime

在 ARC 下查找对 NSInvocation 方法的调用,这些调用没有正确的参数对象生命周期。当将 Objective-C 对象作为参数传递给 NSInvocation 方法 getArgument:atIndex:getReturnValue: 时,这些值将通过值复制到参数指针中,如果对象指针没有声明为 __unsafe_unretained,则会导致不正确的释放行为。

对于代码

id arg;
[invocation getArgument:&arg atIndex:2];

__strong id returnValue;
[invocation getReturnValue:&returnValue];

修复将是

__unsafe_unretained id arg;
[invocation getArgument:&arg atIndex:2];

__unsafe_unretained id returnValue;
[invocation getReturnValue:&returnValue];

检查将警告传递的生命周期不是 __unsafe_unretained 的实例变量引用,但不会提出修复建议

// "id _returnValue" is declaration of instance variable of class.
[invocation getReturnValue:&self->_returnValue];