However when I run the application and quit it, I never see the
text "dealloc" appear in the log window. Does this mean that this
method is never called?
Correct. There is no point individually freeing the memory for every
object at application quit time, because the OS will automatically
reclaim all the memory in one big chunk.
That's true, of course, but the counterpoint is that dealloc can be
used for more than just strictly freeing memory, and these behaviors
will be lost at shutdown time.
For C++ veterans, this can be a rough lesson, because in C++, app
shutdown does invoke destructors, and it's very common for a
destructor to do much more than simply freeing malloc'ed blocks.
Of course, in ObjC, using dealloc to do interesting things will be
frowned on even more in the near future, as garbage collection makes
it impossible to know if or when your dealloc will be called. Could
be immediately, could be much later, could be never! That's fine—all
garbage collection systems are like this—but it does impose another
limitation on what you can reasonably do in a dealloc.
If you want to know when your application is quitting, you should use
the applicationWillTerminate: delegate method or
NSApplicationWillTerminate notification.
And then it's your job to manually release the objects you care about
getting dealloc called on, or do other special behaviors to get your
cleanup code to run.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com