[oc学习日记]kvc,kvo和通知

KVC键值对编码

kvc键值对编码就是在对象没有声明属性(毕竟能用点方法没几个人会再去用kvc),成员变量没有公有化,并且没有写描述方法时使用的一种给成员变量或者属性赋值的一种方式。

例如:

        //我们创建了一个学生类,并将其实例化
        Student *stu = [[Student alloc]init];
        //给学生队形的name成员变量使用kvc赋值
        [stu setValue:@"ss" forKey:@"name"];
        //取出使用键值对进行赋值了的name成员变量的值
        NSLog(@"%@",[stu valueForKey:@"name"]);

 

如果此时学生有一本书,并且这个书有名字,那我们该怎么在学生对象中输出这本书的名字呢

        //首先要用下面这个方法给书的名字进行赋值
        [stu setValue:@"语文" forKeyPath:@"book.name"];
        //而且要在学生类中定义一个book类的对象,而且这个变量的name的成员变量必须要添加@public或者定义属性,否则学生类中无法访问book的name
        Book *book ;

KVO键值观察

没有kvc就没有kvo,当对象属性或者成员变量的值通过kvc发生变化时,kvo就会观察到值的变化,并且做出反应

kvo有三个步骤:

要另外写一个观察者类

1.注册成为观察者

1 -(void)registerWatch{
2     //第一个参数:被观察的对象,第二个参数:观察者的对象,第三个参数:被观察的对象的属性或者变量名,第四个参数:接收到变化的通知时,给我们展示的内容
3     [_stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
4 }

2.重写observeValueForKeyPath方法

1 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
2     NSLog(@"%@",keyPath);//(被观察者)发生改变的变量或属性名
3     
4     NSLog(@"%@",object);//被观察者
5     NSLog(@"%@",change);//属性或变量改变前后的值(字典)new:改变后   old:改变前
6     NSLog(@"%@",[change objectForKey:@"new"]);
7 }

3.移除kvo

-(void)dealloc{
    //移除kvo
    [_stu removeObserver:self forKeyPath:@"name"];
}

如何使用kvo:

在主函数中实例化一个观察者对象,将其注册成为观察者对象

如果被观察者的成员变量活着属性发生变化就会根据observeValueForKeyPath方法输出相应内容

 

通知

通知模式就是通知中心发送信息,如果观察者(接受信息者)监听(接收)到了信息,那么会做出一定的回应

通知模式的使用:

1. 注册通知

-(void)addNotifi{
    //在通知中心注册通知:第一个参数,代表通知接收对象,第二个参数:代表接收到通知后调用的方法,第三个参数:代表通知的名字 最后一个参数不用管,直接给nil
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receive:) name:@"Notifi" object:nil];
}

 2.接收到信息作出反应的方法

//如果通知包含参数,那么方法定义时,需要一个通知的对象作为参数
-(void)receive:(NSNotification *)note{
       NSLog(@"收到通知");
//    NSLog(@"%@",note.object);//此处的note.object就代表发送通知时传过来的信息
    
//    传过来的是什么类型的参数,我们就用什么类型的变量进行处理
//    NSDictionary *dic = note.object;
//    NSLog(@"--%@",dic);
    
    NSLog(@"%@",note.userInfo);//此处的userinfo就代表发送通知时,传过来的userinfo
}

3.移除通知

-(void)dealloc{
    //移除通知,避免消耗内存 ,第一个参数,代表之前注册的通知接收对象,第二个参数,代表注册时写的通知名字
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"Notifi" object:nil];
}

通知模式的使用

在main函数中

        Student *stu = [Student new];
        //将学生对象添加为观察者(监听者)
        [stu addNotifi];
        
        //第一个参数:传入通知名字,告诉通知中心,给哪个通知发消息,注意,此处的名字要与之前注册的名字完全一致,第二个参数,代表发送通知时附带的参数或信息
        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"a", nil];
//        [[NSNotificationCenter defaultCenter] postNotificationName:@"Notifi" object:dic];
        
        //userInfo是通知的一个变量,也可以用来传参
        [[NSNotificationCenter defaultCenter]postNotificationName:@"Notifi" object:nil userInfo:dic];

 

 

kvo与通知模式的比较:

通知模式是由通知中心发送(不可控),kvo是由kvc进行赋值(可控)

转载于:https://www.cnblogs.com/0error/p/4558604.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值