1#ifndef PyObjC_OBJC_OBJECT_H 2#define PyObjC_OBJC_OBJECT_H 3 4#define PyObjCObject_kDEFAULT 0x00 5#define PyObjCObject_kUNINITIALIZED 0x01 6#define PyObjCObject_kCLASSIC 0x02 7#define PyObjCObject_kDEALLOC_HELPER 0x04 8#define PyObjCObject_kSHOULD_NOT_RELEASE 0x08 9#define PyObjCObject_kMAGIC_COOKIE 0x10 10#define PyObjCObject_kCFOBJECT 0x20 11#define PyObjCObject_kBLOCK 0x40 12 13typedef struct { 14 PyObject_HEAD 15 __strong id objc_object; 16 int flags; 17} PyObjCObject; 18 19typedef struct { 20 PyObject_HEAD 21 __strong id objc_object; 22 int flags; 23 PyObjCMethodSignature* signature; 24} PyObjCBlockObject; 25 26 27extern PyObjCClassObject PyObjCObject_Type; 28#define PyObjCObject_Check(obj) PyObject_TypeCheck(obj, (PyTypeObject*)&PyObjCObject_Type) 29 30PyObject* PyObjCObject_New(id objc_object, int flags, int retain); 31PyObject* PyObjCObject_FindSelector(PyObject* cls, SEL selector); 32id PyObjCObject_GetObject(PyObject* object); 33void PyObjCObject_ClearObject(PyObject* object); 34#define PyObjCObject_GetObject(object) (((PyObjCObject*)(object))->objc_object) 35void _PyObjCObject_FreeDeallocHelper(PyObject* obj); 36PyObject* _PyObjCObject_NewDeallocHelper(id objc_object); 37#define PyObjCObject_GetFlags(object) (((PyObjCObject*)(object))->flags) 38#define PyObjCObject_IsClassic(object) (PyObjCObject_GetFlags(object) & PyObjCObject_kCLASSIC) 39#define PyObjCObject_IsBlock(object) (PyObjCObject_GetFlags(object) & PyObjCObject_kBLOCK) 40#define PyObjCObject_GetBlock(object) (((PyObjCBlockObject*)(object))->signature) 41#define PyObjCObject_SET_BLOCK(object, value) (((PyObjCBlockObject*)(object))->signature = (value)) 42 43PyObject* PyObjCObject_NewTransient(id objc_object, int* cookie); 44void PyObjCObject_ReleaseTransient(PyObject* proxy, int cookie); 45 46#endif /* PyObjC_OBJC_OBJECT_H */ 47