As far as I know, when strongOne is released, a weak reference to the same object should be updated to zero.
It is right. But you do not free the object, when you set strongOne to nil, you just change the pointer. ARC probably calls the autorelease on the strongOne object dots, so the object will not actually be released until a later time, when the auto-resource pool is deleted.
Why does this happen only in case 2?
It looks like ARC sends release in this case, so the object is freed, and your weak link is updated immediately.
Or maybe the compiler notices that you never use strongOne before setting it to nil, except to assign it to a weak pointer and therefore decide not to highlight the object in the first place. Go through this code and see if strongOne value other than zero.
Caleb source share