iPhone - dealloc - Release vs. nil

dealloc, iphone, memory, memory-management, release-management

Solution

What you have seen is probably these:

1) [foo release];
2) self.bar = nil;
3) baz = nil;

Is releasing the object, accessing it through the instance variable `foo`. The instance variable will become a dangling pointer. This is the preferred method in dealloc.

Is assigning `nil` to a property `bar` on self, that will in practice release whatever the property is currently retaining. Do this if you have a custom setter for the property, that is supposed to cleanup more than just the instance variable backing the property.

Will overwrite the pointer `baz` referencing the object with nil, but not release the object. The result is a memory leak. Never do this.

Problem

Wondering if someone with experience could possibly explain this a bit more. I have seen examples of... ``` [view release]; view = nil; ``` ....inside the (void) dealloc. What is the difference and is one better then the other? What is the best way? When doing retainCount testing I have personally seen nil drop a count from 3 to 0 for me, but release only drops it from 3 to 2.

Original source