KVO

KVO:(Key-Value-Observer)鍵值觀察者,是觀察者設(shè)計(jì)模式的一種實(shí)現(xiàn)方式

KVO觸發(fā)機(jī)制:一個(gè)對象(觀察者),監(jiān)測另一對象(被觀察者)的某屬性是否發(fā)生變化,若被監(jiān)測的屬性發(fā)生更改,會(huì)觸發(fā)觀察者的一個(gè)方法(方法名固定,類似代理方法)

KVO使用步驟:

  • 注冊觀察者(為被觀察者指定觀察者以及被觀察屬性)
  • 實(shí)現(xiàn)回調(diào)方法
  • 觸發(fā)回調(diào)方法(被觀察屬性發(fā)生更改)
  • 移除觀察者
    -------------------ViewController.m-----------------
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) NSMutableArray *array;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.array = [NSMutableArray array];
    
    // 添加一個(gè)觀察者
    // 第一個(gè)self表示觀察者
    // 第二個(gè)參數(shù) : 被觀察者
    // 第三個(gè)參數(shù) : 觀察的屬性
    // 第四個(gè)參數(shù) : 保險(xiǎn),可以添加一些字符串
    [self addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
    
    // 開發(fā)過程中少用KVO
    
}
// 觀察者模式觸發(fā)的方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    NSLog(@"keyPath ==== %@", keyPath);
    NSLog(@"object ==== %@", object);
    NSLog(@"change ==== %@", change);
}
- (void)dealloc
{
    // 寫了KVO以后,一定要寫移除觀察者的方法
    [self removeObserver:self forKeyPath:@"array"];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 蘋果官方不建議觀察數(shù)組
    NSArray *array = @[@"1", @"2"];
    [[self mutableArrayValueForKey:@"array"] setArray:array];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上半年有段時(shí)間做了一個(gè)項(xiàng)目,項(xiàng)目中聊天界面用到了音頻播放,涉及到進(jìn)度條,當(dāng)時(shí)做android時(shí)候處理的不太好,由于...
    DaZenD閱讀 3,097評論 0 26
  • 本文分為2個(gè)部分:概念與應(yīng)用。概念部分旨在剖析 KVO 這一設(shè)計(jì)模式的實(shí)現(xiàn)原理;應(yīng)用部分通過創(chuàng)建的項(xiàng)目,以說明 K...
    啊左閱讀 58,229評論 107 436
  • KVO 作為 iOS 中一種強(qiáng)大并且有效的機(jī)制,為 iOS 開發(fā)者們提供了很多的便利;我們可以使用 KVO 來檢測...
    JzRo閱讀 1,076評論 0 2
  • 本文結(jié)構(gòu)如下: Why? (為什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等開會(huì)閱讀 1,729評論 1 21
  • Key-Value Observing機(jī)制 知識(shí)點(diǎn)介紹 Key-Value Observing (簡寫為KVO):...
    此生浮華祇盼伊亽閱讀 1,283評論 0 3

友情鏈接更多精彩內(nèi)容