123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- //
- // EXTRuntimeExtensions.h
- // extobjc
- //
- // Created by Justin Spahr-Summers on 2011-03-05.
- // Copyright (C) 2012 Justin Spahr-Summers.
- // Released under the MIT license.
- //
- #import <objc/runtime.h>
- /**
- * Describes the memory management policy of a property.
- */
- typedef enum {
- /**
- * The value is assigned.
- */
- mtl_propertyMemoryManagementPolicyAssign = 0,
- /**
- * The value is retained.
- */
- mtl_propertyMemoryManagementPolicyRetain,
- /**
- * The value is copied.
- */
- mtl_propertyMemoryManagementPolicyCopy
- } mtl_propertyMemoryManagementPolicy;
- /**
- * Describes the attributes and type information of a property.
- */
- typedef struct {
- /**
- * Whether this property was declared with the \c readonly attribute.
- */
- BOOL readonly;
- /**
- * Whether this property was declared with the \c nonatomic attribute.
- */
- BOOL nonatomic;
- /**
- * Whether the property is a weak reference.
- */
- BOOL weak;
- /**
- * Whether the property is eligible for garbage collection.
- */
- BOOL canBeCollected;
- /**
- * Whether this property is defined with \c \@dynamic.
- */
- BOOL dynamic;
- /**
- * The memory management policy for this property. This will always be
- * #mtl_propertyMemoryManagementPolicyAssign if #readonly is \c YES.
- */
- mtl_propertyMemoryManagementPolicy memoryManagementPolicy;
- /**
- * The selector for the getter of this property. This will reflect any
- * custom \c getter= attribute provided in the property declaration, or the
- * inferred getter name otherwise.
- */
- SEL getter;
- /**
- * The selector for the setter of this property. This will reflect any
- * custom \c setter= attribute provided in the property declaration, or the
- * inferred setter name otherwise.
- *
- * @note If #readonly is \c YES, this value will represent what the setter
- * \e would be, if the property were writable.
- */
- SEL setter;
- /**
- * The backing instance variable for this property, or \c NULL if \c
- * \c @synthesize was not used, and therefore no instance variable exists. This
- * would also be the case if the property is implemented dynamically.
- */
- const char *ivar;
- /**
- * If this property is defined as being an instance of a specific class,
- * this will be the class object representing it.
- *
- * This will be \c nil if the property was defined as type \c id, if the
- * property is not of an object type, or if the class could not be found at
- * runtime.
- */
- Class objectClass;
- /**
- * The type encoding for the value of this property. This is the type as it
- * would be returned by the \c \@encode() directive.
- */
- char type[];
- } mtl_propertyAttributes;
- /**
- * Returns a pointer to a structure containing information about \a property.
- * You must \c free() the returned pointer. Returns \c NULL if there is an error
- * obtaining information from \a property.
- */
- mtl_propertyAttributes *mtl_copyPropertyAttributes (objc_property_t property);
|