Advertisement
Guest User

Untitled

a guest
May 24th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. #import <objc/runtime.h>
  2. #import <Foundation/Foundation.h>
  3.  
  4.  
  5. @interface Person : NSObject
  6. @end
  7. @implementation Person
  8. @end
  9.  
  10. @interface Person(dynamicProperties)
  11. @end
  12. @implementation Person(dynamicProperties)
  13.  
  14. static id propertyIMP(id self, SEL _cmd) {
  15. return [[[NSThread currentThread] threadDictionary] valueForKey:NSStringFromSelector(_cmd)];
  16. }
  17.  
  18. static void setPropertyIMP(id self, SEL _cmd, id aValue) {
  19.  
  20. id value = [aValue copy];
  21. NSMutableString *key = [NSStringFromSelector(_cmd) mutableCopy];
  22.  
  23. [key deleteCharactersInRange:NSMakeRange(0, 3)];
  24. [key deleteCharactersInRange:NSMakeRange([key length] - 1, 1)];
  25. NSString *firstChar = [key substringToIndex:1];
  26. [key replaceCharactersInRange:NSMakeRange(0, 1) withString:[firstChar lowercaseString]];
  27.  
  28. [[[NSThread currentThread] threadDictionary] setValue:value forKey:key];
  29. }
  30.  
  31. + (BOOL)resolveInstanceMethod:(SEL)aSEL {
  32. if ([NSStringFromSelector(aSEL) hasPrefix:@"set"]) {
  33. class_addMethod([self class], aSEL, (IMP)setPropertyIMP, "v@:@");
  34. } else {
  35. class_addMethod([self class], aSEL,(IMP)propertyIMP, "@@:");
  36. }
  37. return YES;
  38. }
  39.  
  40. @end
  41.  
  42.  
  43. int main(int argc, char *argv[]) {
  44. @autoreleasepool {
  45. Person *p = [Person new];
  46. [p performSelector:@selector(setName:) withObject:@"Jon"];
  47. NSLog(@"%@",[p performSelector:@selector(name)]);
  48. }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement