iOS中的copy ,kvc,kvo
2016-02-13 17:16
531 查看
实现拷贝的方法有2个
copy:返回不可变副本
只有NSString到NSString得拷贝是浅拷贝,其他的都是深拷贝。深拷贝拷贝对象,浅拷贝拷贝指针。 mutableCopy:返回可变副本 普通对象实现拷贝的步骤
遵守NSCopying协议
?
?
?
?
取值
?
添加监听器
?
?
?
copy:返回不可变副本
只有NSString到NSString得拷贝是浅拷贝,其他的都是深拷贝。深拷贝拷贝对象,浅拷贝拷贝指针。 mutableCopy:返回可变副本 普通对象实现拷贝的步骤
遵守NSCopying协议
?
1 2 3 4 5 6 7 8 | <code class="language-objc" hljs="" java=""> #import <foundation foundation.h=""> @interface MRCar : NSObject <nscopying> /** 价钱 */ @property (nonatomic, assign) double price; /** 重量 */ @property (nonatomic, assign) double weight; @end</nscopying></foundation></code> |
1 2 3 4 | <code> - 实现-copyWithZone:方法 - 创建新对象 - 给新对象的属性赋值 </code> |
1 2 3 4 5 6 7 8 9 10 11 | <code class="language-objc" hljs="" objectivec="">#import MRCar.h @implementation MRCar - (id)copyWithZone:(NSZone *)zone { MRCar *copyCar = [[MRCar allocWithZone:zone] init]; copyCar.price = self.price; copyCar.weight = self.weight; return copyCar; } @end</code> |
vc">KVC
全称:Key Value Coding(键值编码) 赋值?
1 2 3 4 | <code class="language-objc" hljs="" objectivec="">// 能修改私有成员变量 - (void)setValue:(id)value forKey:(NSString *)key; - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;</code> |
?
1 2 3 4 | <code class="language-objc" hljs="" objectivec="">// 能取得私有成员变量的值 - (id)valueForKey:(NSString *)key; - (id)valueForKeyPath:(NSString *)keyPath; - (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;</code> |
KVO
全称:Key Value Observing(键值监听) 作用:监听模型的属性值改变 步骤添加监听器
?
1 2 3 4 | <code 1c="" class="language-objc" hljs=""> // 为对象a添加一个观察者(监听器) // Observer:观察者(监听器) // KeyPath:属性名(需要监听哪个属性) [a addObserver:b forKeyPath:@name options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@test];</code> |
1 2 | <code> - 在监听器中实现监听方法 </code> |
1 2 3 4 5 6 7 8 9 10 11 12 | <code class="language-objc" hljs="" java="">/** * 当利用KVO监听到某个对象的属性值发生了改变,就会自动调用这个 * * @param keyPath 哪个属性被改了 * @param object 哪个对象的属性被改了 * @param change 改成咋样 * @param context 当初addObserver时的context参数值 */ -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@%@ %@ %@ %@, object, keyPath, change, context); }</code> |
相关文章推荐
- iOS中关于动画效果的要点
- iOS中如何获取用户的触摸操作
- Objc将数据写入iOS真机的plist文件中
- iOS中@property
- iOS内存管理之我所见
- [iOS]iOS的字号转换问题
- [iOS]APP代码实践:建立一个辅助的APP类,减少对AppDelegate的修改
- IOS 事件传递说明
- 本地化处理(IOS)
- iOS-基础动画
- IOS不用AutoLayout也能实现自动布局的类(5)----MyFlowLayout横空出世
- 在ios中使用soundtouch库实现变声
- ios 泛型
- IOS开发--待研究源码(持续添加更新)
- 01环信iOS SDK的集成
- Growth iOS 1.0版 发布——社区功能:更好的学习气氛
- iOS-AutoLayout布局学习
- iOS模拟器模拟器快捷键
- iOS设计模式FWZ
- ios轻量级开发FWZ