国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

IOS開發之KVC與KVO簡述

2019-11-14 19:30:57
字體:
來源:轉載
供稿:網友

KVC:Key-Value Coding

KVO:Key-Value Observing

 

Person.m

#import <Foundation/Foundation.h>@interface Person : NSObject{    //該訪問修飾符用于說明即使私有成員變量也可以通過kvc方式訪問和賦值    @PRivate    NSString *_name;    NSArray *_dogs;}@end@implementation Person@end

Dog.m

#import <Foundation/Foundation.h>@class Person;@interface Dog : NSObject{    @private    NSInteger _age;    Person *_owner;}@end@implementation Dog@end

PersonObserve.m

#import <Foundation/Foundation.h>#import "Person.h"@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

#import <Foundation/Foundation.h>#import "Person.h"#import "PersonObserve.h"#import "Dog.h"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:@"zhangsan" forKey:@"name"];            //kvc中forKeyPath的用法    Dog *d = [[Dog alloc] init];    [d setValue:p forKey:@"owner"];    [d setValue:@"lisi" forKeyPath:@"owner.name"];        //移除對私有成員變量“name”的觀察    [p removeObserver:po forKeyPath:@"name"];            Dog *d1 = [[Dog alloc] init];    [d1 setValue:@10 forKey:@"age"];    Dog *d2 = [[Dog alloc] init];    [d2 setValue:@20 forKey:@"age"];            NSArray *array = [NSArray arrayWithObjects:d1,d2, nil];    [p setValue:array forKey:@"dogs"];            //kvc中valueForKeyPath數組內置表達式的用法    NSLog(@"dogs.age = %@",[p valueForKeyPath:@"dogs.age"]);    NSLog(@"dogs.age.sum = %@",[p valueForKeyPath:@"dogs.@sum.age"]);//dogs數組中age的總和    NSLog(@"dogs.age.avg = %@",[p valueForKeyPath:@"dogs.@avg.age"]);//dogs數組中age的平均值    NSLog(@"dogs.age.max = %@",[p valueForKeyPath:@"dogs.@max.age"]);//dogs數組中age的最大值    NSLog(@"dogs.age.min = %@",[p valueForKeyPath:@"dogs.@min.age"]);//dogs數組中age的最小值            return 0;}

結果:

2015-03-07 21:09:34.611 KVC&KOC[3079:122638] zhangsan2015-03-07 21:09:34.612 KVC&KOC[3079:122638] lisi2015-03-07 21:09:34.613 KVC&KOC[3079:122638] dogs.age = (    10,    20)2015-03-07 21:09:34.613 KVC&KOC[3079:122638] dogs.age.sum = 302015-03-07 21:09:34.613 KVC&KOC[3079:122638] dogs.age.avg = 152015-03-07 21:09:34.613 KVC&KOC[3079:122638] dogs.age.max = 202015-03-07 21:09:34.613 KVC&KOC[3079:122638] dogs.age.min = 10Program ended with exit code: 0

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奉新县| 延津县| 宜州市| 延津县| 施秉县| 扎赉特旗| 宜兴市| 荆门市| 台安县| 尚志市| 贺州市| 木里| 宣城市| 南充市| 枣庄市| 达尔| 金溪县| 海原县| 沽源县| 奉新县| 莱西市| 津市市| 鄂托克旗| 什邡市| 青田县| 义乌市| 高邮市| 伊吾县| 西畴县| 红原县| 钦州市| 牡丹江市| 康保县| 乌兰浩特市| 青阳县| 嘉禾县| 辽源市| 泰安市| 洱源县| 日土县| 会昌县|