Skip to content

Instantly share code, notes, and snippets.

@eldesperado
Last active November 22, 2015 05:28
Show Gist options
  • Save eldesperado/7d07a53c191326989111 to your computer and use it in GitHub Desktop.
Save eldesperado/7d07a53c191326989111 to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
@interface KeyValueObserver : NSObject
@property (nonatomic, weak) id target;
@property (nonatomic) SEL selector;
/// Create a Key-Value Observing helper object.
///
/// As long as the returned token object is retained, the KVO notifications of the @c object
/// and @c keyPath will cause the given @c selector to be called on @c target.
/// @a object and @a target are weak references.
/// Once the token object gets dealloc'ed, the observer gets removed.
///
/// The @c selector should conform to
/// @code
/// - (void)nameDidChange:(NSDictionary *)change;
/// @endcode
/// The passed in dictionary is the KVO change dictionary (c.f. @c NSKeyValueChangeKindKey, @c NSKeyValueChangeNewKey etc.)
///
/// @returns the opaque token object to be stored in a property
///
/// Example:
///
/// @code
/// self.nameObserveToken = [KeyValueObserver observeObject:user
/// keyPath:@"name"
/// target:self
/// selector:@selector(nameDidChange:)];
/// @endcode
+ (NSObject *)observeObject:(id)object keyPath:(NSString*)keyPath target:(id)target selector:(SEL)selector __attribute__((warn_unused_result));
/// Create a key-value-observer with the given KVO options
+ (NSObject *)observeObject:(id)object keyPath:(NSString*)keyPath target:(id)target selector:(SEL)selector options:(NSKeyValueObservingOptions)options __attribute__((warn_unused_result));
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment