 <p>Matt Galloway's answer on <a href="http://stackoverflow.com/questions/8855461/did-the-target-action-design-pattern-became-bad-practice-under-arc">this thread</a> explains the why:</p> <blockquote> <p>Consider the following:</p> <pre><code>id anotherObject1 = [someObject performSelector:@selector(copy)]; id anotherObject2 = [someObject performSelector:@selector(giveMeAnotherNonRetainedObject)]; </code></pre> <p>Now, how can ARC know that the first returns an object with a retain count of 1 but the second returns an object which is autoreleased?</p> </blockquote> <p>It seems that it is generally safe to suppress the warning if you are ignoring the return value. I'm not sure what the best practice is if you really need to get a retained object from performSelector -- other than "don't do that".</p>