## Advanced usage

For convenience, `gtk_spell_checker_new()` is created as `GInitiallyUnowned` and `gtk_spell_checker_attach()` will sink the floating reference. `gtk_spell_checker_attach()` also connects the `destroy` signal of the passed-in `GObject` to `g_object_unref()` the `GtkSpellChecker`, so in the most common use-case, you need not worry about cleaning it up. However, if you want to detach and later reattach the `GtkSpellChecker` to a (possibly different) `GtkTextView`, you must get a pointer to it with `gtk_spell_checker_get_from_text_view()`, call `g_object_ref()` on the resulting pointer, call `gtk_spell_checker_detach()` on it, call `gtk_spell_checker_attach()` with the new `GtkTextView`, and finally call `g_object_unref()` to release the reference that you took at the beginning, like this:

    GtkTextView* view = gtk_text_view_new ();
    GtkSpellChecker* spell = gtk_spell_checker_new ();
    gtk_spell_checker_set_language (spell, "en_US", NULL);
    gtk_spell_checker_attach (GTK_TEXT_VIEW (view));
    /* ... */
    // Detach
    g_object_ref (spell);
    gtk_spell_checker_detach (spell);
    /* ... */
    // Reattach
    gtk_spell_checker_attach (spell, GTK_TEXT_VIEW (view));
    g_object_unref (spell);

Alternatively, you can sink the `GtkSpellChecker` immediately upon construction with `g_object_ref_sink()`, in which case you will retain the ownership of the `GtkSpellChecker` throughout the lifetime of the program, and you must remember to call `g_object_unref()` when you don't need it any more, like this:

    GtkTextView* view = gtk_text_view_new ();
    GtkSpellChecker* spell = gtk_spell_checker_new ();
    g_object_ref_sink (spell);
    gtk_spell_checker_set_language (spell, "en_US", NULL);
    gtk_spell_checker_attach (GTK_TEXT_VIEW (view));
    /* ... */
    // Detach
    gtk_spell_checker_detach (spell);
    /* ... */
    // Reattach
    gtk_spell_checker_attach (spell, GTK_TEXT_VIEW (view));
    /* ... */
    // End of life time
    g_object_unref (spell);