if so, which one to prefer when in iOS4, or why there is (unsafe_unretained) if its exactly same as assign?
you should use unsafe_unretained
. You want to show the reader of your code that you actually wanted to use weak but that this was not possible because weak is not available on the iOS version you want to deploy.
One day you will drop the support for iOS4. And then you could just search for unsafe_unretained
and replace all of them with weak
. This will be much easier than searching for assign
and figuring out if you actually meant assign
or weak
The use of unsafe_unretained
creates more readable and understandable code where the intentions of the developer are easier to see.
Basically the same reason we use YES
instead of 1
.