I box my numeric primitives using a macro:

#define DB_BOX_INT64( x ) ( mono_value_box(mono_domain_get(), 
mono_get_int64_class(), &x) )


And use it like so:

1.

- (void)box
{
MonoObject *monoObject = DB_BOX_INT64(value);
}

I save the MonoObject * into a local variable. The collector will see the 
object on the stack and collect it only when the enclosing function completes.

2.
- (void)box:(long long)value
{
        self.monoObject = DB_BOX_INT64(value);
        self.gcHandle = mono_gchandle_new(self.monoObject, FALSE);
}

- (void)dealloc
{
        mono_gchandle_free(self.gcHandle);
}

I save the MonoObject * into an instance variable. The collector will free the 
MonoObject after the call to mono_gchandle_free().

Is the above correct?

Regards

Jonathan












_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to