FLEXRuntimeUtility.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. //
  2. // FLEXRuntimeUtility.h
  3. // Flipboard
  4. //
  5. // Created by Ryan Olson on 6/8/14.
  6. // Copyright (c) 2014 Flipboard. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <objc/runtime.h>
  10. extern const unsigned int kFLEXNumberOfImplicitArgs;
  11. // See https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
  12. extern NSString *const kFLEXUtilityAttributeTypeEncoding;
  13. extern NSString *const kFLEXUtilityAttributeBackingIvar;
  14. extern NSString *const kFLEXUtilityAttributeReadOnly;
  15. extern NSString *const kFLEXUtilityAttributeCopy;
  16. extern NSString *const kFLEXUtilityAttributeRetain;
  17. extern NSString *const kFLEXUtilityAttributeNonAtomic;
  18. extern NSString *const kFLEXUtilityAttributeCustomGetter;
  19. extern NSString *const kFLEXUtilityAttributeCustomSetter;
  20. extern NSString *const kFLEXUtilityAttributeDynamic;
  21. extern NSString *const kFLEXUtilityAttributeWeak;
  22. extern NSString *const kFLEXUtilityAttributeGarbageCollectable;
  23. extern NSString *const kFLEXUtilityAttributeOldStyleTypeEncoding;
  24. @interface FLEXRuntimeUtility : NSObject
  25. // Property Helpers
  26. + (NSString *)prettyNameForProperty:(objc_property_t)property;
  27. + (NSString *)typeEncodingForProperty:(objc_property_t)property;
  28. + (BOOL)isReadonlyProperty:(objc_property_t)property;
  29. + (SEL)setterSelectorForProperty:(objc_property_t)property;
  30. + (NSString *)fullDescriptionForProperty:(objc_property_t)property;
  31. + (id)valueForProperty:(objc_property_t)property onObject:(id)object;
  32. + (NSString *)descriptionForIvarOrPropertyValue:(id)value;
  33. + (void)tryAddPropertyWithName:(const char *)name attributes:(NSDictionary *)attributePairs toClass:(__unsafe_unretained Class)theClass;
  34. // Ivar Helpers
  35. + (NSString *)prettyNameForIvar:(Ivar)ivar;
  36. + (id)valueForIvar:(Ivar)ivar onObject:(id)object;
  37. + (void)setValue:(id)value forIvar:(Ivar)ivar onObject:(id)object;
  38. // Method Helpers
  39. + (NSString *)prettyNameForMethod:(Method)method isClassMethod:(BOOL)isClassMethod;
  40. + (NSArray *)prettyArgumentComponentsForMethod:(Method)method;
  41. // Method Calling/Field Editing
  42. + (id)performSelector:(SEL)selector onObject:(id)object withArguments:(NSArray *)arguments error:(NSError * __autoreleasing *)error;
  43. + (NSString *)editableJSONStringForObject:(id)object;
  44. + (id)objectValueFromEditableJSONString:(NSString *)string;
  45. + (NSValue *)valueForNumberWithObjCType:(const char *)typeEncoding fromInputString:(NSString *)inputString;
  46. + (void)enumerateTypesInStructEncoding:(const char *)structEncoding usingBlock:(void (^)(NSString *structName, const char *fieldTypeEncoding, NSString *prettyTypeEncoding, NSUInteger fieldIndex, NSUInteger fieldOffset))typeBlock;
  47. + (NSValue *)valueForPrimitivePointer:(void *)pointer objCType:(const char *)type;
  48. @end