IOS開發之KVC與KVO簡述,ioskvckvo
KVC:Key-Value Coding
KVO:Key-Value Observing
Person.m
@interface Person : NSObject{ //該存取修飾詞用於說明即使私人成員變數也可以通過kvc方式訪問和賦值 @private NSString *_name;}@end@implementation Person@end
PersonObserve.m
@interface PersonObserve : NSObject@end@implementation PersonObserve- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ Person *p = (Person *)object; //使用kvc方式擷取成員變數keypath的值 NSLog(@"%@",[p valueForKey:keyPath]);}@end
main.m
int main(int argc, const char * argv[]) { //觀察者類 PersonObserve *po = [[PersonObserve alloc] init]; Person *p = [[Person alloc] init]; //使用kvo方式對成員變數“name”的屬性值變化增加觀察者po //po將在該屬性值發生變化時執行- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法 [p addObserver:po forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil]; //通過kvc方式設定成員變數“name”的屬性值 //出發觀察者執行對應方法 [p setValue:@"yangys" forKey:@"name"]; //移除對私人成員變數“name”的觀察 [p removeObserver:po forKeyPath:@"name"]; return 0;}
結果:
2015-03-02 20:57:52.487 KVC&KOC[843:24874] yangysProgram ended with exit code: 0