From 6088c79dd19e570fe99f3baffb5aaf97030ad508 Mon Sep 17 00:00:00 2001 From: George Cox Date: Fri, 6 Jan 2017 15:13:10 -0500 Subject: [PATCH] Adds support for ignoring synthesized or specified properties; * Adds class method that, if overridden to return YES, will cause synthesized properties to be ignored. * Adds class method that, if implemented to return an array of keys, will cause any property with a matching key to be ignored. --- GVUserDefaults/GVUserDefaults.h | 2 ++ GVUserDefaults/GVUserDefaults.m | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/GVUserDefaults/GVUserDefaults.h b/GVUserDefaults/GVUserDefaults.h index e746095..8ae4ab0 100644 --- a/GVUserDefaults/GVUserDefaults.h +++ b/GVUserDefaults/GVUserDefaults.h @@ -11,5 +11,7 @@ @interface GVUserDefaults : NSObject + (instancetype)standardUserDefaults; ++ (BOOL)ignoreSynthesizedProperties; ++ (NSArray *)ignoredKeys; @end diff --git a/GVUserDefaults/GVUserDefaults.m b/GVUserDefaults/GVUserDefaults.m index 6454ae0..a800858 100644 --- a/GVUserDefaults/GVUserDefaults.m +++ b/GVUserDefaults/GVUserDefaults.m @@ -133,6 +133,14 @@ + (instancetype)standardUserDefaults { return sharedInstance; } ++ (BOOL)ignoreSynthesizedProperties { + return NO; +} + ++ (NSArray *)ignoredKeys { + return nil; +} + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wundeclared-selector" #pragma GCC diagnostic ignored "-Warc-performSelector-leaks" @@ -192,6 +200,11 @@ - (void)generateAccessorMethods { const char *name = property_getName(property); const char *attributes = property_getAttributes(property); + if ((void *)(strstr(attributes, ",D")-attributes) == NULL + || ([self.class ignoredKeys] != nil + && [[self.class ignoredKeys] containsObject:[[NSString alloc] initWithUTF8String:name]])) { + continue; + } char *getter = strstr(attributes, ",G"); if (getter) { getter = strdup(getter + 2);