实现拷贝的方法有2个
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> |