Ok, let it analyze this:
Let's say you create a block inside some method, assign it to some variable:
MyBlock block = ^{};
Then you just assigned it to the property with assign :
self.myblock = block;
When the return method returns, the variable block will go out of scope and become free. Therefore, keeping this in mind, you must copy lock the object, and then save it in the instance variable. This way you can own a block for the lifetime of the containing object.
source share