[Openmcl-devel] cocoa memory management best practices?
raffaelcavallaro at mac.com
Fri Sep 24 09:08:57 CDT 2010
I think it would be useful to know the best way to deal with the life cycle of cocoa objects. Possibly the various situations can be enumerated and memory management best practices outlined for each.
Most importantly, please correct anything here that is wrong (i.e., likely to lead to a memory leak or outright crash), and please add any common situations that I've overlooked.
1. containing lisp class (i.e., not having ns:ns-object as its metaclass) with an objective-c slot.
- call ccl::terminate-when-unreachable on the containing lisp instance in its intitialize-instance method
- do necessary deallocation (#/release, etc.) of objective-c slots in a ccl:terminate method on the containing lisp class
2. containing Objetive-c class (with ns:ns-object as its metaclass) with a:
2a. lisp slot
- assume this lisp slot is taken care of by the gc?
2b. objective-c slot
- call ccl::terminate-when-unreachable on the containing objective-c instance in its intitialize-instance method
- do necessary deallocation (#/release, etc.) of objective-c slots in a ccl:terminate method on the containing objective-c class
- do necessary deallocation of objective-c slots in the containing objective-c class's #/dealloc method.
option 3 ?:
- for objective-c objects owned/managed by a custom window class, do necessary deallocation in the custom window's #/close method
3. Shared objective-c resources
- put the shared resource into a special var and let it live for the duration of the program (it's memory will be reclaimed when the app quits)
comments and corrections most welcome.
raffaelcavallaro at me.com
More information about the Openmcl-devel