mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-14 05:16:18 +01:00
corrected floating reference documentation.
Mon Dec 12 15:31:41 2005 Tim Janik <timj@imendio.com> * gobject/tmpl/objects.sgml: corrected floating reference documentation.
This commit is contained in:
parent
0d19d25fe4
commit
2e6faeec59
@ -1,3 +1,7 @@
|
|||||||
|
Mon Dec 12 15:31:41 2005 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
|
* gobject/tmpl/objects.sgml: corrected floating reference documentation.
|
||||||
|
|
||||||
2005-12-09 Matthias Clasen <mclasen@redhat.com>
|
2005-12-09 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* === Released 2.9.1 ===
|
* === Released 2.9.1 ===
|
||||||
|
@ -13,18 +13,55 @@ property access methods, and signal support.
|
|||||||
Signals are described in detail in <xref linkend="gobject-Signals"/>.
|
Signals are described in detail in <xref linkend="gobject-Signals"/>.
|
||||||
</para>
|
</para>
|
||||||
<para id="floating-ref">
|
<para id="floating-ref">
|
||||||
The initial reference to a #GObject which is returned by g_object_new() can
|
The initial reference a #GObject is created with is flagged as a
|
||||||
optionally be "floating", which means that it is not specifically owned
|
<firstterm>floating</firstterm> reference.
|
||||||
by the creator of the object. The floating reference can be converted into
|
This means that it is not specifically claimed to be "owned" by
|
||||||
an ordinary reference by anyone at any time, by calling g_object_ref_sink().
|
any code portion. The main motivation for providing floating references is
|
||||||
If the object is already sunk (has no floating reference), g_object_ref_sink()
|
C convenience. In particular, it allowes code to be written as:
|
||||||
returns a new reference.
|
<example><programlisting>
|
||||||
|
container = create_container();
|
||||||
|
container_add_child (container, create_child());
|
||||||
|
</programlisting></example>
|
||||||
|
If <function>container_add_child()</function> will g_object_ref_sink() the
|
||||||
|
passed in child, no reference of the newly created child is leaked.
|
||||||
|
Without floating references, <function>container_add_child()</function>
|
||||||
|
can only g_object_ref() the new child, so to implement this code without
|
||||||
|
reference leaks, it would have to be written as:
|
||||||
|
<example><programlisting>
|
||||||
|
Child *child;
|
||||||
|
container = create_container();
|
||||||
|
child = create_child();
|
||||||
|
container_add_child (container, child);
|
||||||
|
g_object_unref (child);
|
||||||
|
</programlisting></example>
|
||||||
|
The floating reference can be converted into
|
||||||
|
an ordinary reference by calling g_object_ref_sink().
|
||||||
|
For already sunken objects (objects that don't have a floating reference
|
||||||
|
anymore), g_object_ref_sink() is equivalent to g_object_ref() and returns
|
||||||
|
a new reference.
|
||||||
|
Since floating references are useful allmost exclusively for C convenience,
|
||||||
|
language bindings that provide automated reference and memory ownership
|
||||||
|
maintenance (such as smart pointers or garbage collection) therefore don't
|
||||||
|
need to expose floating references in their API.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
To create #GObject<!-- -->s with a floating reference, call
|
Some object implementations may need to save an objects floating state
|
||||||
g_object_force_floating() from the object's init function.
|
across certain code portions (an example is #GtkMenu), to achive this, the
|
||||||
|
following sequence can be used:
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<example><programlisting>
|
||||||
|
/* save floating state */
|
||||||
|
gboolean was_floating = g_object_is_floating (object);
|
||||||
|
g_object_ref_sink (object);
|
||||||
|
/* protected code portion */
|
||||||
|
...;
|
||||||
|
/* restore floating state */
|
||||||
|
if (was_floating)
|
||||||
|
g_object_force_floating (object);
|
||||||
|
g_obejct_unref (object); /* release previously acquired reference */
|
||||||
|
</programlisting></example>
|
||||||
|
|
||||||
<!-- ##### SECTION See_Also ##### -->
|
<!-- ##### SECTION See_Also ##### -->
|
||||||
<para>
|
<para>
|
||||||
#GParamSpecObject, g_param_spec_object()
|
#GParamSpecObject, g_param_spec_object()
|
||||||
@ -419,7 +456,7 @@ When its reference count drops to 0, the object is finalized (i.e. its memory is
|
|||||||
|
|
||||||
<!-- ##### FUNCTION g_object_ref_sink ##### -->
|
<!-- ##### FUNCTION g_object_ref_sink ##### -->
|
||||||
<para>
|
<para>
|
||||||
Increase the reference count of @object, and remove the
|
Increase the reference count of @object, and possibly remove the
|
||||||
<link linkend="floating-ref">floating</link> reference, if @object
|
<link linkend="floating-ref">floating</link> reference, if @object
|
||||||
has a floating reference.
|
has a floating reference.
|
||||||
</para>
|
</para>
|
||||||
@ -442,10 +479,11 @@ reference.
|
|||||||
|
|
||||||
<!-- ##### FUNCTION g_object_force_floating ##### -->
|
<!-- ##### FUNCTION g_object_force_floating ##### -->
|
||||||
<para>
|
<para>
|
||||||
This function is intended for #GObject implementations to mark the
|
This function is intended for #GObject implementations to re-enforce a
|
||||||
initial reference to the object as
|
<link linkend="floating-ref">floating</link> object reference.
|
||||||
<link linkend="floating-ref">floating</link>. It must only be called
|
Doing this is seldomly required, all
|
||||||
from an object's init function.
|
#GObject<!-- -->s are created with a floating reference which usually
|
||||||
|
just needs to be sunken by calling g_object_ref_sink().
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@object: a #GObject
|
@object: a #GObject
|
||||||
|
Loading…
Reference in New Issue
Block a user