In this documentation object and instance are not synonym. An object can be an instance or a class, but a class is not considered to be an instance.
- objects : everything that can be messaged, that has a class
- class : a runtime object
- instance : objects that are not classes
void *mulle_objc_object_call( void *obj,
mulle_objc_methodid_t methodid,
void *parameter);
The mulle-clang compiler emits this for
-O0.
The non-inlining variant of sending a message to an object (calling an objects method). Parameters and return values are passed via parameter according to the MetaABI.
obj must be a pointer to a valid object or NULL.
void *mulle_objc_object_call_inline_partial( void *obj,
mulle_objc_methodid_t methodid,
void *parameter)
This is an optimized variant of mulle_objc_object_call in cases, where
methodid is a known constant. The compiler uses this method when optimizing
with -O1.
Right: mulle_objc_object_call_inline_partial( self, 0x1848, NULL),
Wrong: mulle_objc_object_call_inline_partial( self, _cmd, NULL)
void *mulle_objc_object_call_inline( void *obj,
mulle_objc_methodid_t methodid,
void *parameter)
This is an even further optimized variant of mulle_objc_object_call in cases,
where methodid is a known constant. The compiler uses this method when
optimized with -O2 and up. Frequent use of this function can increase the size
of your executable by quite a bit.
Right: mulle_objc_object_call_inline( self, 0x1848, NULL),
Wrong: mulle_objc_object_call_inline( self, _cmd, NULL)
void *mulle_objc_object_call_classid( void *obj,
mulle_objc_methodid_t methodid,
void *parameter,
mulle_objc_classid_t classid);
Instead of using the isa as the class to lookup the method, use the class
given by classid. This is used by the compiler for super calls. It is a much
slower operatin than mulle_objc_object_call.
void mulle_objc_objects_call( void **objects, unsigned int n, mulle_objc_methodid_t methodid, void *params)
Call all n``objects with message methoid and arguments params in sequence.
This method is singlethreaded and executes from the objects[ 0] up to but not
including objects[ n]. It is OK, if objects contains NULL pointers.
Using mulle_objc_objects_call can be more efficient then using a boiler plate
for loop yourself.
void *mulle_objc_object_retain_inline( void *obj)
Increment the reference count of obj. obj may be NULL. Returns obj
back, this is a convenience and somewhat of an optimisation, since the caller
does not not need to save obj for the call.
So obj = mulle_objc_object_retain_inline( obj) is safe and may be faster than
just mulle_objc_object_retain_inline( obj).
void mulle_objc_object_release_inline( void *obj)
Decrement the reference count of obj. obj may be NULL. If the reference
count goes into negative, an internal version of mulle_objc_object_finalize
will be called, unless mulle_objc_object_finalize has been called before on
this object. If the object did not get retained during finalization, then an
internal version of mulle_objc_object_dealloc is called. The object is then
to be considered "dead" and must not be messaged any more.
See: mulle_objc: object layout, retain counting, finalize
struct _mulle_objc_class *mulle_objc_object_get_class( void *obj)
Returns the class of obj, basically what -class does. This is different than asking an obj for its isa class, becauses classes and instances both return the same class here (assert( [foo class] == [Foo class])
struct _mulle_objc_runtime *mulle_objc_object_get_runtime( void *obj)
Return the runtime, the class of obj belongs to. In mulle-objc multiple runtimes can coexist, so this is in general more correct, than just calling mulle_objc_get_runtime.
struct _mulle_objc_class *cls mulle_objc_object_get_isa( void *obj)
Returns the isa class of obj. This is not necessarily the same as the isa pointer in the object header, because the function resolves tagged pointers.
void mulle_objc_object_set_isa( void *obj, struct _mulle_objc_class *cls)
Change the isa of obj to cls. This will fail and raise an exception, if obj is of a tagged pointer class. If either value is NULL, the function does nothing.
void mulle_objc_object_dealloc( void *obj)
A C way of calling -dealloc on an object. If you call this function yourself,
you are probably "doing it wrong".
void *mulle_objc_object_copy( void *obj)
A C way of calling -copy on an object, returns obj.
void mulle_objc_object_release_inline( void *obj)
A C way of calling mulle_objc_object_release_inline on an object. It's not any faster
then calling -release.
void *mulle_objc_object_autorelease( void *obj)
A C way of calling -autorelease on an object, returns obj.