hhafez
hhafez

Reputation: 39750

Difference between release and dealloc in objective-c

When deallocing a refrence I've seen release and dealloc being used for example

-(void)dealloc
{
  [foo release];
  [nar dealloc];

  [super dealloc];
}

My question is when is release to be used and when is dealloc to be used?

Thanks

Upvotes: 40

Views: 40323

Answers (3)

Chuck
Chuck

Reputation: 237060

Never call dealloc except as [super dealloc] at the end of your class's dealloc method. The release method relinquishes ownership of an object. When a Cocoa object no longer has any owners, it may be deallocated — in which case it will automatically be sent a dealloc message.

If you're going to program Cocoa, you need to read the Memory Management Guidelines. It's incredibly simple once you get over the initial hump, and if you don't understand what's in that document, you'll have lots of subtle bugs.

Upvotes: 55

Vadoff
Vadoff

Reputation: 9419

You're never supposed to call dealloc explicitly (unless it's [super dealloc] within the dealloc method, but that's the only exception). Objective-C handles memory management via reference counting, so you're simply supposed to match your allocs/retains with releases/autoreleases and let the object deconstruct itself.

Upvotes: 2

Abizern
Abizern

Reputation: 150615

The dealloc statement in your example is called when the object's retain count becomes zero (through an object sending it a release message).

As it is no longer needed, it cleans itself up by sending a release message to the objects that it is holding on to.

Upvotes: 2

Related Questions