.. title:: clang-tidy - objc-nsinvocation-argument-lifetime
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 incorrect releasing behavior if the object pointers are
not declared ``__unsafe_unretained``.
For code:
.. code-block:: objc
id arg;
[invocation getArgument:&arg atIndex:2];
__strong id returnValue;
[invocation getReturnValue:&returnValue];
The fix will be:
.. code-block:: objc
__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:
.. code-block:: objc
// "id _returnValue" is declaration of instance variable of class.
[invocation getReturnValue:&self->_returnValue];