### Class method

# GObject ObjectClass install_properties

since: 2.26

#### Declaration

    void
    g_object_class_install_properties (
      GObjectClass* oclass,
      guint n_pspecs,
      GParamSpec** pspecs
    )

#### Description

Installs new properties from an array of `GParamSpecs`.

All properties should be installed during the class initializer. It is possible to install properties after that, but doing so is not recommend, and specifically, is not guaranteed to be thread-safe vs. use of properties on the same type on other threads.

The property id of each property is the index of each `GParamSpec` in the `pspecs` array.

The property id of 0 is treated specially by `GObject` and it should not be used to store a `GParamSpec`.

This function should be used if you plan to use a static array of `GParamSpecs` and g_object_notify_by_pspec(). For instance, this class initialization:

    typedef enum {
      PROP_FOO = 1,
      PROP_BAR,
      N_PROPERTIES
    } MyObjectProperty;

    static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };

    static void
    my_object_class_init (MyObjectClass *klass)
    {
      GObjectClass *gobject_class = G_OBJECT_CLASS (klass);

      obj_properties[PROP_FOO] =
        g_param_spec_int ("foo", NULL, NULL,
                          -1, G_MAXINT,
                          0,
                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);

      obj_properties[PROP_BAR] =
        g_param_spec_string ("bar", NULL, NULL,
                             NULL,
                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);

      gobject_class->set_property = my_object_set_property;
      gobject_class->get_property = my_object_get_property;
      g_object_class_install_properties (gobject_class,
                                         G_N_ELEMENTS (obj_properties),
                                         obj_properties);
    }

allows calling `g_object_notify_by_pspec()` to notify of property changes:

    void
    my_object_set_foo (MyObject *self, gint foo)
    {
      if (self->foo != foo)
        {
          self->foo = foo;
          g_object_notify_by_pspec (G_OBJECT (self), obj_properties[PROP_FOO]);
        }
     }

Available since: 2.26

#### Parameters

`n_pspecs`

  Type: `guint`

  The length of the `GParamSpecs` array.

`pspecs`

  Type: An array of `GParamSpec*`

  The `GParamSpecs` array defining the new properties.

  The length of the array is specified in the `n_pspecs` argument.
  The data is owned by the caller of the method.