iOS KVO 学习笔记
2016-01-16 14:35
573 查看
//// //// 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; }
相关文章推荐
- iOS开发-状态模式
- iOS-项目中的文件
- iOS 截屏并保存到相册
- iOS 初学者功能代码大集合,个人笔记
- iOS中的复制对象 浅,深复制
- iOS平台XML解析类库对比和安装说明
- IOS开发之Cocoa编程—— NSUndoManager
- 【转】iOS开发之压缩与解压文件
- ios之图片圆角半径
- iOS多线程补充
- iOS多线程概述
- ios修改屏幕亮度
- iOS 实现类似雷达效果的核心代码
- iOS页面间传值方式(代理Delegate,通知Notification,块Block)
- IOS 多线程初探(三) - GCD
- 个人写的第一个效果
- iOS角标
- ios7和之前版本区别
- ios中for循环和for-in循环的用法和区别
- iOS之数据存取