 <p>As in any method call, it just a question of what happens where. If you don't want <code>[self.aMutableArray objectAtIndex:0]</code> evaluated now, don't include it in the invocation expression! Instead, make the invocation expression a call to a method where <em>that method</em> will call <code>[self.aMutableArray objectAtIndex:0]</code>:</p> <pre><code>[[self.undoManager prepareWithInvocationTarget:self] doSomethingWithObjectAtIndex:0]; </code></pre> <p>...where <code>doSomethingWithObjectAtIndex:</code> is where <code>[self.aMutableArray objectAtIndex:0]</code> is called.</p>