Why isn’t my weak reference cleared right after the strong ones are gone?

From the assembly code it can be seen that accessing weakPtr generates a objc_loadWeak call. According to the Clang documentation, objc_loadWeak retains and autoreleases the object and is equivalent to id objc_loadWeak(id *object) { return objc_autorelease(objc_loadWeakRetained(object)); } This (hopefully) explains why both if(strongPtr == weakPtr) … and NSLog(@”weakPtr: %@”, weakPtr); create additional autoreleased references. This … Read more