title: Objective-C: Why two requests of [object copy] return the same result？
body: <p>I would expect <code>copy</code> on an object to generate a new object. But it seems it will only generate a different one and may reuse it for another <code>copy</code>.</p>
  <pre><code>void (^block1)(void) = ^ {
      // ...
  };
  void (^block2)(void) = ^ {
      // ...
  };
  typeof(block1) block3 = [block1 copy];
  typeof(block1) block4 = [block1 copy];
  typeof(block2) block5 = [block2 copy];
  
  XCTAssertNotEqual(block1, block2);
  XCTAssertNotEqual(block2, block3);
  XCTAssertNotEqual(block3, block4); // Fail, [block1 copy] returns the same result for two requests
  XCTAssertNotEqual(block4, block5);
  </code></pre>
  <p>But why does it act like this?</p>