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];