Objective-C Difference between setting nil and releasing
Solution 1:
self.object = nil
calls your setter, which will release the old value, set the member to nil
, and possibly do other things (it's a method, so it could do anything). The "anything" part of that is potentially dangerous; see this question, for example.
[object release]
releases the old value, but leaves the member as a now-dangling pointer, which is a good recipe for bugs. In dealloc
it doesn't really matter, since the pointer itself is about to go away too, but in any other case it's a very bad idea to release a member without setting it to nil
.
(As a sidenote, you should never assume that releasing an object gives it a reference count of 0. It releases your reference, but other objects may still have references to it.)
Solution 2:
If you do object = nil
without [object release]
, that might causes memory leaking. If you do [object release]
without object = nil
afterwards, object becomes dangling pointer as @Jim suggested. self.object = nil
is a sugar for setter function call.