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

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

ios開發--KVO淺析

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

目標:監聽NSMutableArray對象中增加了什么

 

代碼如下:

C代碼 復制代碼 收藏代碼
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.   
  5.     self.dataArray = [NSMutableArray arrayWithObject:@"1"];  
  6.     [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];  
  7.        
  8. }  
- (void)viewDidLoad{    [super viewDidLoad];    self.dataArray = [NSMutableArray arrayWithObject:@"1"];    [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];     }

 

C代碼 復制代碼 收藏代碼
  1. - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context  
  2. {  
  3.     NSLog(@"%@", keyPath);  
  4.     NSLog(@"%@", object);  
  5.     NSLog(@"%@", change);  
  6. }  
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSLog(@"%@", keyPath);    NSLog(@"%@", object);    NSLog(@"%@", change);}

 

C代碼 復制代碼 收藏代碼
  1. - (IBAction)add:(id)sender  
  2. {  
  3.     NSArray *addData = [NSArray arrayWithObjects:@"11", @"12", @"13", nil];  
  4.     [self.dataArray addObjectsFromArray:addData];  
  5.       
  6.     self.dataArray = [NSMutableArray arrayWithObject:@"2"];  
  7. }  
- (IBAction)add:(id)sender{    NSArray *addData = [NSArray arrayWithObjects:@"11", @"12", @"13", nil];    [self.dataArray addObjectsFromArray:addData];        self.dataArray = [NSMutableArray arrayWithObject:@"2"];}

 

輸入日志:

C代碼 復制代碼 收藏代碼
  1. 2013-01-15 16:05:10.120 KVOTest[2199:907] dataArray  
  2. 2013-01-15 16:05:10.121 KVOTest[2199:907] <ZZTViewController: 0x20846590>  
  3. 2013-01-15 16:05:10.123 KVOTest[2199:907] {  
  4.     kind = 1;  
  5.     new =     (  
  6.         2  
  7.     );  
  8.     old =     (  
  9.         1,  
  10.         11,  
  11.         12,  
  12.         13  
  13.     );  
  14. }  
2013-01-15 16:05:10.120 KVOTest[2199:907] dataArray2013-01-15 16:05:10.121 KVOTest[2199:907] <ZZTViewController: 0x20846590>2013-01-15 16:05:10.123 KVOTest[2199:907] {    kind = 1;    new =     (        2    );    old =     (        1,        11,        12,        13    );}

 

 

經過測試得如下結論:kvo監聽的是對象指針的變動,NSString、int、float等對象的變動(abc = @"123"、abc = 12、abc = 12.2)皆為指針的變動,所以通過此方式來捕捉array的變化是不可行的

 

但,我們可以通過此方式來做控件屬性的變動。如下:

C代碼 復制代碼 收藏代碼
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.       
  5.     self.personObject = [PersonObject personObjectWithBankInstance:[BankObject bankObjectWithAccountBalance:10]];  
  6.       
  7.     [self.personObject addObserver:self forKeyPath:@"bankInstance.accountBalance" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];    // 此處注意是監聽personObject對象下的bankInstance的accountBalance變化  
  8. }  
- (void)viewDidLoad{    [super viewDidLoad];        self.personObject = [PersonObject personObjectWithBankInstance:[BankObject bankObjectWithAccountBalance:10]];        [self.personObject addObserver:self forKeyPath:@"bankInstance.accountBalance" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];    // 此處注意是監聽personObject對象下的bankInstance的accountBalance變化}

 

C代碼 復制代碼 收藏代碼
  1. - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context  
  2. {  
  3.     NSLog(@"%@", keyPath);  
  4.     NSLog(@"%@", object);  
  5.     NSLog(@"%@", change);  
  6. }  
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSLog(@"%@", keyPath);    NSLog(@"%@", object);    NSLog(@"%@", change);}

 

C代碼 復制代碼 收藏代碼
  1. - (IBAction)add:(id)sender  
  2. {  
  3.     [self.personObject.bankInstance setAccountBalance:2111];  
  4. }  
- (IBAction)add:(id)sender{    [self.personObject.bankInstance setAccountBalance:2111];}

 輸出日志:

C代碼 復制代碼 收藏代碼
  1. 2013-01-15 16:05:10.111 KVOTest[2199:907] bankInstance.accountBalance  
  2. 2013-01-15 16:05:10.116 KVOTest[2199:907] <PersonObject: 0x20856180>  
  3. 2013-01-15 16:05:10.118 KVOTest[2199:907] {  
  4.     kind = 1;  
  5.     new = 2111;  
  6.     old = 10;  
  7. }  
2013-01-15 16:05:10.111 KVOTest[2199:907] bankInstance.accountBalance2013-01-15 16:05:10.116 KVOTest[2199:907] <PersonObject: 0x20856180>2013-01-15 16:05:10.118 KVOTest[2199:907] {    kind = 1;    new = 2111;    old = 10;}

 

如有問題,請留言共同探討。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 故城县| 环江| 罗江县| 蒙阴县| 同江市| 温宿县| 乌兰县| 浙江省| 阜城县| 海阳市| 贵港市| 永和县| 成武县| 吉木乃县| 方城县| 景德镇市| 勃利县| 旬邑县| 水富县| 景德镇市| 黔南| 遂溪县| 万年县| 达孜县| 辽宁省| 华阴市| 正安县| 元氏县| 姚安县| 神池县| 会理县| 黄大仙区| 五河县| 修水县| 射洪县| 常宁市| 寻甸| 新宾| 大庆市| 新乡县| 开江县|