Difference between revisions of "LibVLC Memory Management"
Jump to navigation
Jump to search
Pdherbemont (talk | contribs) (Initial Creation.) |
m (Editing) |
||
Line 1: | Line 1: | ||
− | + | == Reference Counting == | |
− | + | LibVLC uses a certain number of objects. Each one maintains a references count, which is used to know when the object must be released. The three related functions are: | |
− | LibVLC uses a certain number of objects. Each one maintains a references count, which is used to know when the object must be released. The three related functions are: | ||
− | * libvlc_object_name_'''new'''() ''Create an object with a refcount | + | * libvlc_object_name_'''new'''() ''Create an object with a refcount equal to 1.'' |
* libvlc_object_name_'''retain'''() ''Increment the object refcount by 1.'' | * libvlc_object_name_'''retain'''() ''Increment the object refcount by 1.'' | ||
Line 10: | Line 9: | ||
* libvlc_object_name_'''release'''() ''Decrement the refcount by 1, and release the object if the new refcount is less than zero.'' | * libvlc_object_name_'''release'''() ''Decrement the refcount by 1, and release the object if the new refcount is less than zero.'' | ||
− | + | === Objects that don't follow this rule === | |
+ | |||
+ | ??? | ||
+ | |||
+ | === Example === | ||
− | |||
libvlc_exception_t e; | libvlc_exception_t e; | ||
libvlc_exception_init( &e ); | libvlc_exception_init( &e ); | ||
Line 20: | Line 22: | ||
/* Free the memory used by media_list release */ | /* Free the memory used by media_list release */ | ||
libvlc_media_list_release( p_ml ); | libvlc_media_list_release( p_ml ); | ||
− | |||
== Getters and Setters == | == Getters and Setters == | ||
− | Usually object | + | |
+ | Usually object properties are set through getters and setters. | ||
* Usually getters are in the form: | * Usually getters are in the form: | ||
Line 32: | Line 34: | ||
* Variations: | * Variations: | ||
− | |||
** Setter: libvlc_media_list_add_media_descriptor | ** Setter: libvlc_media_list_add_media_descriptor | ||
− | |||
** Getter: libvlc_media_list_item_at_index | ** Getter: libvlc_media_list_item_at_index | ||
For setters and getters the memory management rules are: | For setters and getters the memory management rules are: | ||
− | * Getters internally '''retain''' the object before returning it, so is means you must '''release''' the object after | + | * Getters internally '''retain''' the object before returning it, so is means you must '''release''' the object after use. |
* Setters internally '''retain''' the object, so basically you never need to keep the object around. | * Setters internally '''retain''' the object, so basically you never need to keep the object around. | ||
− | (This also applies to strings where retain is strdup and release is free) | + | (This also applies to strings where retain is '''strdup''' and release is '''free''') |
Notable exceptions to those rules are: | Notable exceptions to those rules are: | ||
− | * libvlc_''object_name''_'''event_manager''': This getter never | + | * libvlc_''object_name''_'''event_manager''': This getter never retains the object prior returning it. That means you '''mustn't release''' it. |
Revision as of 16:20, 13 January 2008
Contents
Reference Counting
LibVLC uses a certain number of objects. Each one maintains a references count, which is used to know when the object must be released. The three related functions are:
- libvlc_object_name_new() Create an object with a refcount equal to 1.
- libvlc_object_name_retain() Increment the object refcount by 1.
- libvlc_object_name_release() Decrement the refcount by 1, and release the object if the new refcount is less than zero.
Objects that don't follow this rule
???
Example
libvlc_exception_t e; libvlc_exception_init( &e ); libvlc_media_list_t * p_ml = libvlc_media_list_new( libvlc_inst, &e) /* Free the memory used by media_list release */ libvlc_media_list_release( p_ml );
Getters and Setters
Usually object properties are set through getters and setters.
- Usually getters are in the form:
libvlc_object_name_object
- Setters are:
libvlc_object_name_set_object
- Variations:
- Setter: libvlc_media_list_add_media_descriptor
- Getter: libvlc_media_list_item_at_index
For setters and getters the memory management rules are:
- Getters internally retain the object before returning it, so is means you must release the object after use.
- Setters internally retain the object, so basically you never need to keep the object around.
(This also applies to strings where retain is strdup and release is free)
Notable exceptions to those rules are:
- libvlc_object_name_event_manager: This getter never retains the object prior returning it. That means you mustn't release it.