Skip to content

Instantly share code, notes, and snippets.

@breeno
Created November 7, 2011 15:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save breeno/1345253 to your computer and use it in GitHub Desktop.
Save breeno/1345253 to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
@interface NSObject (RegisterObserverAdditions)
-(void) registerObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context;
-(void) unregisterAllObservers;
@end
#import "NSObject+RegisterObserverAdditions.h"
#import <objc/runtime.h>
#define kObservedKeyPaths @"__observedKeyPaths"
@interface NSObject()
-(NSMutableArray *) observedKeyPaths;
@end
@implementation NSObject (RegisterObserverAdditions)
-(void) registerObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context
{
if( [[self observedKeyPaths] containsObject: keyPath] )
return;
[self addObserver: observer forKeyPath: keyPath options: options context: context];
[[self observedKeyPaths] addObject: keyPath];
}
-(void) unregisterAllObservers
{
for( NSString *keyPath in [self observedKeyPaths] )
{
[self removeObserver: self forKeyPath: keyPath];
}
[[self observedKeyPaths] removeAllObjects];
}
#pragma mark- Internal Methods
-(NSMutableArray *) observedKeyPaths
{
NSMutableArray *observered = objc_getAssociatedObject( self, kObservedKeyPaths);
if( !observered )
{
observered = [NSMutableArray array];
objc_setAssociatedObject( self, kObservedKeyPaths, observered, OBJC_ASSOCIATION_RETAIN);
}
return observered;
}
@end
#import <Foundation/Foundation.h>
@interface NSObject (RegisterObserverAdditions)
-(void) registerObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context;
-(void) unregisterAllObservers;
@end
#import "NSObject+RegisterObserverAdditions.h"
#import <objc/runtime.h>
#define kObservedKeyPaths @"__observedKeyPaths"
@interface NSObject()
-(NSMutableArray *) observedKeyPaths;
@end
@implementation NSObject (RegisterObserverAdditions)
-(void) registerObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context
{
if( [[self observedKeyPaths] containsObject: keyPath] )
return;
[self addObserver: observer forKeyPath: keyPath options: options context: context];
[[self observedKeyPaths] addObject: keyPath];
}
-(void) unregisterAllObservers
{
for( NSString *keyPath in [self observedKeyPaths] )
{
[self removeObserver: self forKeyPath: keyPath];
}
[[self observedKeyPaths] removeAllObjects];
}
#pragma mark- Internal Methods
-(NSMutableArray *) observedKeyPaths
{
NSMutableArray *observed = objc_getAssociatedObject( self, kObservedKeyPaths);
if( !observed )
{
observed = [NSMutableArray array];
objc_setAssociatedObject( self, kObservedKeyPaths, observed, OBJC_ASSOCIATION_RETAIN);
}
return observed;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment