源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

以实例讲解Objective-C中的KVO与KVC机制

  • 时间:2021-11-08 23:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:以实例讲解Objective-C中的KVO与KVC机制
KVO实例浅析 最近遇到个问题,在处理项目中一个评论界面时,因为直接用的是UIWebView展示评论列表,结果取到的页面上下都有一段CGSize为(320,65)的乱七八糟的广告,十分碍眼.头部广告因很方便的在头部坐标贴上自己的logo解决了,但是尾部的,因为每个页面的评论长短不一,坐标也就不一样,这样就不能给定死坐标去贴logo,思前想后,通过KVO很好的解决了这个问题. @KVO概述: KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。 简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 使用步骤如下: 1. 注册,指定被观察者的属性, 2. 实现回调方法 3. 触发回调方法   4. 移除观察 代码实例:
%s__%d__|%@",__FUNCTION__,__LINE__,[student valueForKey:@"name"]); 
  特别注意:     我在类里面还定义了4个BOOL值变量,用来验证KVC访问属性键顺序         [student setValue:@(YES) forKey:@"test”];           结果是:_test—>_isTest—>test—>isTest  2.键路径访问(用于一个类中属性的属性 setValue:ForKeyPath: forKeyPath)
[u]复制代码[/u] 代码如下:
//  创建一个班级类  @interface HMTClass : NSObject    @property (nonatomic,copy)NSString * name;    @end 
  然后前面第一点中在Student类中写了一个班级属性hmtClass 
[u]复制代码[/u] 代码如下:
  HMTClass *hmtClass = [[HMTClass alloc]init];  [hmtClass setValue:@"宇宙一班" forKey:@"name"];  [student setValue:hmtClass forKey:@"hmtClass"];  NSString *hmtClassName = [student valueForKeyPath:@"hmtClass.name"];    //也可以这样存值  [student setValue:@"宇宙一班" forKeyPath:@"hmtClass.name"];  student.hmtClass.name = [student valueForKeyPath:@"hmtClass.name"]; 
3.自动封装基本数据类型 我们在Student类中添加分数属性 NSInteger number 学号;
[u]复制代码[/u] 代码如下:
#import <Foundation/Foundation.h>    @class HMTClass;    @interface HMTStudent : NSObject    {        NSString *_name;          NSInteger number;    }    @end      [student setValue:@"100" forKeyPath:@"number"];    NSString *number = [student valueForKey:@"number"];   
可见用NSString*类型设置的属性值@"100",而我们的属性是NSInteger类型的,存取都没有问题。  4.操作集合 在Student类中加入数组NSArray,用来表示其他的学生。
[u]复制代码[/u] 代码如下:
#import <Foundation/Foundation.h>    @class HMTClass;    @interface HMTStudent : NSObject    {        NSArray *manyStudents;    }    @end                Student *student1 = [[HMTStudent alloc]init];    Student *student2 = [[HMTStudent alloc]init];    Student *student3 = [[HMTStudent alloc]init];    [student1 setValue:@"200" forKey:@"number"];    [student2 setValue:@"300" forKey:@"number"];    [student3 setValue:@"400" forKey:@"number"];    NSArray *array = [NSArray arrayWithObjects:student1,student2,student3,nil];    [student setValue:array forKey:@"manyStudents"];    NSLog(@"%@",[student valueForKeyPath:@"manyStudents.number"]);  
打印出来是数组(200,300,400) 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部