 <p>If you access property like this</p> <pre><code>self.property=@""; </code></pre> <p>you are in fact using setter method( which is auto-created thanks to @synthesize). So, in this case, the old object is released and new one is assigned and retained.</p> <p>If you synthesized your property using</p> <pre><code>@synthesize property= _property; </code></pre> <p>then if you call</p> <pre><code>_property=@""; </code></pre> <p>then you just assign new value to the property. Nothing is being released then.</p> <p>So, in your <code>dealloc</code> method you have some choices:</p> <pre><code>-(void)dealloc { self.property=@"";//old value released, new value is @"" self.property=nil;//old value released, new value is nil [_property release]; //old value released [super dealloc]; } </code></pre>