zoukankan      html  css  js  c++  java
  • iOS KVO 学习笔记

    ////
    ////  main.m
    ////  TestBasis
    ////
    ////  Created by ficow on 16/1/14.
    ////  Copyright © 2016年 ficow. All rights reserved.
    ////
    //
    #import <Foundation/Foundation.h>
    ///////////////////////////////////////////////////////////////////////////////////////////////
    @interface myClass1 : NSObject
    @property (nonatomic, copy) NSString *str;
    @end
    
    @implementation myClass1
    @end
    ///////////////////////////////////////////////////////////////////////////////////////////////
    @interface myClass : NSObject
    {
    }
    @property (nonatomic, retain) myClass1 *item;
    @end
    
    
    @implementation myClass
    
    - (id)init{
        if(self = [super init]){
            [self setValue:[[myClass1 alloc]init] forKey:@"item"];//如果不给item设置值,则最后得到的item.str为空!
        }
        return self;
    }
    /////////////////////////////////////////////////////////////////////////////////////////////
    //KVO part
    - (void) setItem:(myClass1 *)item{
        _item = item;
        [self addObserver:self forKeyPath:@"item.str" options:NSKeyValueObservingOptionNew context:nil];//1.添加监听器,监听item.str
        //[self.item addObserver:self forKeyPath:@"str" options:NSKeyValueObservingOptionNew context:nil];和上面的效果一样
    }
    
    //重写监听的方法,当被监听的对象改变了,就回调监听器的这个方法
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
        NSLog(@"item.str has changed");
    }
    
    - (void)dealloc{
        [self removeObserver:self forKeyPath:@"item.str"];//用完就删除监听器
    }
    
    @end
    /////////////////////////////////////////////////////////////////////////////////////////////
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            class1.item.str = @"item.str";
        }
        return 0;
    }
     
  • 相关阅读:
    Laravel实用小功能
    _initialize() 区别 __construct()
    PHP websocket之聊天室实现
    原来PHP对象比数组用更少的内存
    PHP协程
    mongodb数据库的导出与导入
    我理解的数据结构(一)—— 数组(Array)
    Swoole 源码分析——Server模块之Worker事件循环
    PHP面试:说下什么是堆和堆排序?
    我理解的数据结构(二)—— 栈(Stack)
  • 原文地址:https://www.cnblogs.com/ficow/p/5135492.html
Copyright © 2011-2022 走看看