Yes, the copy role in ARC is the same as the copy role in MRR
copy will call the copyWithZone: method. when it sends a mutable object, it returns an immutable object clone, which saves Count equal to 1. When it sends an immutable object, it will not copy, it will return the object itself, but saveCount +1.
So, when you use a copy in ARC, you can use it like this: object1 = [object2 copy]; ARC will manage keepCount object1 , and then object1 will be released ARC, object2 preserveCount will be the corresponding change. Therefore you are not worried about memory.
The example block should be copy when passing as id parameters.
apple document said:
As a rule, you do not need to copy (or save) a block. Only you need to make a copy when you expect the block to be used after destroying the sphere in which it was declared. Copying moves block to heap
and ughoavgfhw said :
Blocks are similar to other objects for memory management, but not the same. When a block is created that accesses local variables, it is created on the stack. This means that it is valid only as long as its scope is. To save this block later, you need to copy it, copy it to the heap
Guo luchuan
source share