IOS学习笔记八(KVO)

 

1、KVO介绍

KVO机制NSKeyValueObserving协议支持,NS遵循了这个协议 ,所以NSObject的子类都可使用协议中的方法,下面方法可以注册监听

添加监听器

addObserver: forKeyPath: options: context:

删除监听

removeObserver: forKeyPath:

//重写下面的方法,当数据发生变化的时候会回调这个函数

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context

 

 

 

 

 

2、测试代码

FKItemView.h

#ifndef FKItemView_h
#define FKItemView_h
#import <Foundation/Foundation.h>
#import "FKItem.h"@interface FKItemView : NSObject
@property (nonatomic, weak) FKItem *item;
-(void)showItemInfo;
@end#endif /* FKItemView_h */

 

FKItemView.m

 

#import <Foundation/Foundation.h>
#import "FKItemView.h"@implementation FKItemView
@synthesize item = _item;-(void)showItemInfo
{NSLog(@"item物品名为:%@,物品价格为:%d", self.item.name, self.item.price);
}
//自定义设置item
-(void)setItem:(FKItem *)item
{self->_item = item;
//    self.item = item;//为item添加监听器,监听item的name属性的改变[self.item addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];[self.item addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionInitial context:nil];}
//重写方法,当监听的数据模型发生改变时候,就会回调这个方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{NSLog(@"observeValueForKeyPath方法被调用了");NSLog(@"被修改的keyPath为:%@", keyPath);NSLog(@"被修改的对象为:%@", object);NSLog(@"新被修改的属性值为:%@", [change objectForKey:@"new"]);NSLog(@"被修改的上下文为:%@", context);
}-(void)dealloc
{[self.item removeObserver:self forKeyPath:@"name"];[self.item removeObserver:self forKeyPath:@"price"];
}
@end

 

 

 

main.m

#import "FKItemView.h"int main(int argc, char * argv[]) {@autoreleasepool {FKItemView *itemView = [FKItemView new];FKItem *item = [FKItem new];itemView.item = item;[itemView showItemInfo];item.name = @"chencaifeng";item.price = 79;}
}

 

 

 

 

 


3、运行结果

observeValueForKeyPath方法被调用了
被修改的keyPath为:name
被修改的对象为:<FKItem: 0x600000035360>
新被修改的属性值为:chencaifeng
被修改的上下文为:(null)
observeValueForKeyPath方法被调用了
被修改的keyPath为:price
被修改的对象为:<FKItem: 0x600000035360>
新被修改的属性值为:(null)
被修改的上下文为:(null)

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果、联想及华硕均看准美国电脑运输的增长

据国外媒体雅虎金融报道&#xff0c;根据国际数据公司的研究&#xff0c;美国个人电脑在4Q14中下跌至1820万台&#xff0c;在4Q15中下跌至1740万台&#xff0c;跌幅4.3%。而苹果、联想和华硕的产品出货量却呈现上市趋势。苹果出货量上升8.9%&#xff0c;至220万台&#xff0c;华…

CentOS下为Web网站性能做测试

CentOS下为Web网站性能做测试时间:2014-12-08 01:33来源:loosky.net 作者:自由的风 举报 点击:429次Webbench是知名的网站压力方面的测试工具&#xff0c;它是由Lionbridge公司开发。官方主页&#xff1a;http://home.tiscali.cz/~cz210552/webbench.html在运维工作中&#…

如何升级浏览器_前谷歌员工爆料:谷歌工程师们是如何合谋“杀死”IE6浏览器的...

浏览器在互联网中的地位可见一斑&#xff0c;甚至可以说&#xff0c;它是比搜索引擎和社交软件更强的流量入口。微软IE6当年在2001年作为Windows XP的默认浏览器发布&#xff0c;比Chrome首次发布还要早六年。 但是&#xff0c;谷歌Chrome却后来居上&#xff0c;如今的市场份额…

安卓设备刷linux发行版,绝对精华,大牛教你在Android系统上安装linux发行版

Install linux distribution(Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux) on Android system在Android系统上安装linux发行版(Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux)1、所用的手机类型为Samsung Note2 Verizon i6052、…

C#格式化字符串大全

1、格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0.20) 默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数 string.Format("{0:…

在不安装mysql-connector-net的情况下使用FluentData框架

最近在开发项目中使用了FluentData框架&#xff0c;通过使用这个框架减少了很多开发的工作量&#xff0c;FluentData是一个轻量级的框架操作起来的自由度很大也少了很多负责的配置。但是在开发的时候发现一个问题就是当计算机中没有安装mysql-connector-net驱动的时候&#xff…

IOS之提示control may reach end of non-void function

1、xcode提示的错误如下 control may reach end of non-void function 2、原因和解决办法 函数在类的实现里面没有写返回值&#xff0c;所以提示这个&#xff0c;加上返回值就行了。

在 ASP.NET Core 中使用 HTTP 标头传播

前言我们常用 JWT 令牌用于身份验证&#xff0c;前端一般是在请求中包含 HTTP 标头 Authorization 实现。但是&#xff0c;当服务间需要互相调用时&#xff0c;也需要"按原样"将标头传播到目标服务。原来的解决方案是从请求中读取标头&#xff0c;并将其添加到对外请…

我的测试之路

进入测试已经五个年头了&#xff0c;感觉这个行业还是比较适合自己的&#xff0c;在这个道路上我还有很长的路要走&#xff0c;在此先和大家分享下我的五年测试历程。 职业道路选择------认准目标就前进 我最开始接触测试这行是在2005年&#xff0c;还算比较早的&#xff0c;但…

中英文标点符号切换的组合键_易混标点符号:一字线(—)、短横线(-)、浪纹线(~)...

前情提要&#xff1a;上次辨析了容易混淆的中英文冒号&#xff08;&#xff1a;、:&#xff09;、比号&#xff08;∶&#xff09;【点此查看】&#xff0c;这次继续介绍易混标点符号。易混标点符号&#xff1a;一字线&#xff08;—&#xff09;、短横线&#xff08;-&#xf…

Linux命令-网络命令:wall

wall hello word 向所有登录用户发送消息hello world root用户自己也会收到消息,wangyunpeng用户收到消息如下图:

linux系统构架ftp,用Linux系统构建高效FTP服务器

在众多网络应用中&#xff0c;FTP(文件传输协议)有着非常主要的地位。Internet中一个十分主要的资源就是软件资源&#xff0c;而各种各样的软件资源大多数都放在FTP服务器中。与大多数Internet服务一样&#xff0c;FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户…

C# Color颜色对照表

C# Color 颜色对照表 Color.AliceBlue

IOS之学习笔记九(对象的初始化)

1、oc对象的初始化 [[** alloc] init] 分2步,alloc是开辟内存&#xff0c;分配在堆区&#xff0c;这里java和C都一样&#xff0c;init是进行初始化。 [** new]和[[** alloc] init]等效&#xff0c;习惯用前面的。 2、对象的初始化常用方法demo FKCard.h#ifndef KFCard_h #de…

win定时关机_两种方法让你设置电脑定时关机

方法一&#xff1a;利用计划程序步骤一&#xff1a;在开始菜单搜索框中输入计划任务&#xff0c;点击任务计划程序步骤二&#xff1a;点击操作再点击创建基本任务创建基本任务中输入名称和相关描述步骤三&#xff1a;触发器选择为每天&#xff0c;然后点击下一步步骤四&#xf…

图片轮转

js/*轮播*/ $(function () {var page 1;var i 4; //每版放4个图片var len $(".scroll_content li").length;var page_count Math.ceil(len / i); //只要不是整数&#xff0c;就往大的方向取最小的整数var none_unit_width $(".scroll_mod").width()…

web面试题

WEB前端面试题整理列表 1、列举你工作中遇到的IE6 BUG&#xff0c;谈谈解决方案。 3、如何用CSS分别单独定义IE6、7、8的width属性。 所有浏览器 通用height: 100px;IE6 专用_height: 100px;IE6 专用*height: 100px;IE7 专用*height: 100px;IE7、FF 共用height: 100px !importa…

启动物联网智能校园,NFC技术可变出哪些创新应用?

NFC在物联网领域也深耕相当长的时间&#xff0c;随着法规松绑&#xff0c;NFC终于在中国崭露头角&#xff0c;官产学界纷纷积极拓展应用服务。而在校园生活中&#xff0c;NFC又扮演了什么样的角色&#xff1f; 近场通讯技术&#xff08;Near Field Communication&#xff0c;以…

linux电脑培训,电脑培训Linux服务器初始化Shell

常州电脑培训-Linux服务器初始化Shell脚本#!/bin/sh# desc: lsm03624 modified by www.webnginx.com#-------------------cut begin-------------------------------------------#welcomecat << EOF--------------------------------------------------------------| We…

IOS学习笔记十(多态)

1、多态 相同类型调用同一个方法呈现多种不同的行为特征就是多态 当子类对象直接赋值给父类指针变量&#xff0c;父类 *p [子类 new];&#xff0c;运行类型是子类&#xff0c;编译类型是父类&#xff0c;所以p不能调用子类单独实现的方法&#xff0c;如果子类重写了父类方法…