KVO(键值观察)

news/2024/7/20 21:56:59 标签: xcode, ios, macos

KVO(键值观察)是Objective-C 对观察者设计模式的一种实现。

举个栗子:指定一个被观察对象(A类),当被观察对象某个属性(A中的字符串name)发生更改时,对象(B类)会获得通知,并作出相应处理;且不需要给被观察的对象添加任何额外代码,就能使用KVO机制。

相比于其他语言,OC的一大特点就是动态派发,而swift为了优化性能,采用的是静态派发,所以我们需要一些操作来在swift中使用KVO。


import UIKit
import Foundation
class ViewController: UIViewController {

    //实例化被观察对象
    var nowname = names()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = .red
        //添加观察着
        nowname.addObserver(self, forKeyPath: "name",options: .new, context: nil)
        //3秒后执行被观察对象值的改变
        self.perform(#selector(ChangeName), with: nil, afterDelay: 3)
        
    }
    //
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if nowname.name != ""{
            print("The new person is \(nowname.name)")
            self.view.backgroundColor = .yellow
        }
        
    }
    
}

extension ViewController{
    // 被观察对象的改变
    @objc func ChangeName(){
        nowname.name = "John"
    }
    
}
//要继承NSObject 因为kvo是oc的东西
class names : NSObject{
    //设置动态派发 必须得要dynamic 否则无法观察
    @objc dynamic var name : String = ""
}

KVO给网络请求实时更改数据时需要进行的一系列操作带来了巨大的便利。


http://www.niftyadmin.cn/n/5264169.html

相关文章

centos7服务器上的文件上传到谷歌云盘(google drive)

1,下载gdrive客户端,Releases glotlabs/gdrive GitHub 2,下载完解压,并移动到cp gdrive /usr/local/bin/ 3,查看是否安装成功 4,添加账户,gdrive account add 根据链接,创建Client id和 Client secret 5,填写Client…

Elasticsearch从入门到项目部署 安装 分词器 索引库操作

day08-Elasticsearch 黑马商城作为一个电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。 首先,查询效率较低。 由于数据库模糊查询不走索引,在数据量较大的时候&a…

JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)

目录 JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)1、概念:什么是 JVM ?JVM 的作用? 2、JVM 的主要组成部分?类加载器(Class Loader):简单…

RocketMQ的架构是什么样的❓

RocketMQ,作为一款强大的分布式消息中间件,广泛应用于各种大规模分布式系统中,为异步消息通信提供了可靠的解决方案。本文将深入探讨RocketMQ的核心组件,包括Producer、Broker、Consumer和NameServer,以及它们在整个架…

前端已死?未来的出路?

文章目录 前端寒冬应届生建议培训班建议选专业2024年机遇 前端寒冬 最近菜鸟身为一个毕业一年的前端,确实是感到寒冬冷酷! 于是今天闲着无聊就搜了一下前端的出路是什么?2024前端怎么办?前端已死?这一类的问题&#…

spring boot 实现直播聊天室(二)

spring boot 实现直播聊天室(二) 技术方案: spring bootnettyrabbitmq 目录结构 引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.96.Final</version> </dependency>Si…

Python-折线图可视化

折线图可视化 1.JSON数据格式2.pyecharts模块介绍3.pyecharts快速入门4.创建折线图 1.JSON数据格式 1.1什么是JSON JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串 1.2主要功能json就是一种在各个编程语言中流…

Java学习-连接Mysql数据库

1.先在Mysql里面构建一个表格 例子&#xff1a;名字为user1&#xff0c;两列分别为name、score 2.正确导入了MySQL的JDBC驱动程序 2.1 下载驱动包&#xff08;与自己的服务器版本匹配&#xff09; 官网地址&#xff1a;Maven Repository: mysql mysql-connector-java 8.0.29 …