objc-nsinvocation-argument-lifetime¶
Finds calls to NSInvocation methods under ARC that don’t have proper
argument object lifetimes. When passing Objective-C objects as parameters
to the NSInvocation methods getArgument:atIndex: and
getReturnValue:, the values are copied by value into the argument pointer,
which leads to to incorrect releasing behavior if the object pointers are
not declared __unsafe_unretained.
For code:
id arg;
[invocation getArgument:&arg atIndex:2];
__strong id returnValue;
[invocation getReturnValue:&returnValue];
The fix will be:
__unsafe_unretained id arg;
[invocation getArgument:&arg atIndex:2];
__unsafe_unretained id returnValue;
[invocation getReturnValue:&returnValue];
The check will warn on being passed instance variable references that have
lifetimes other than __unsafe_unretained, but does not propose a fix:
// "id _returnValue" is declaration of instance variable of class.
[invocation getReturnValue:&self->_returnValue];