Add attributes and methods during iOS Runtime
First: Method BOOL class_addProperty (Class cls, const char * name, const objc_property_attribute_t * attributes, unsigned int attributeCount) in runtime. h)
# Include <objc/runtime. h> # import <Foundation/Foundation. h> @ interface SomeClass: NSObject {NSString * _ privateName;} @ end @ implementation SomeClass-(id) init {self = [super init]; if (self) _ privateName = @ "Steve"; return self ;}@ endNSString * nameGetter (id self, SEL _ cmd) {Ivar ivar = class_getInstanceVariable ([SomeClass class], "_ privateName"); return object_getIvar (self, ivar);} void nameSetter (id Self, SEL _ cmd, NSString * newName) {Ivar ivar = class_getInstanceVariable ([SomeClass class], "_ privateName"); id oldName = object_getIvar (self, ivar ); if (oldName! = NewName) object_setIvar (self, ivar, [newName copy]);} int main (void) {@ autoreleasepool {objc_property_attribute_t type = {"T ", "@/" NSString/""}; objc_property_attribute_t ownership = {"C", ""}; // C = copy objc_property_attribute_t backingivar = {"V ", "_ privateName"}; objc_property_attribute_t attrs [] = {type, ownership, backingivar}; class_addProperty ([SomeClass class], "name", attrs, 3 ); class_addMethod ([SomeClass class], @ selector (name), (IMP) nameGetter, "@:"); class_addMethod ([SomeClass class], @ selector (setName :), (IMP) nameSetter, "v @: @"); id o = [SomeClass new]; NSLog (@ "% @", [o name]); [o setName: @ "Jobs"]; NSLog (@ "% @", [o name]) ;}} output: SteveJobs type 2:-(id) valueForUndefinedKey :( NSString *) key 3: static char const * const ObjectTagKey; @ implementation NSObject (ExampleCategoryWithProperty) @ dynamic objectTag;-(id) objectTag {return identifier (self, ObjectTagKey);}-(void) setObjectTag :( id) newObjectTag {objc_setAssociatedObject (self, ObjectTagKey, newObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC );}