標籤:ios kvc kvo copy
拷貝
- 實現拷貝的方法有2個
- copy:返回不可變副本
- 只有NSString到NSString得拷貝是淺拷貝,其他的都是深拷貝。深拷貝拷貝對象,淺拷貝拷貝指標。
- mutableCopy:返回可變副本
- 普通對象實現拷貝的步驟
#import <Foundation/Foundation.h>@interface MRCar : NSObject <NSCopying>/** 價錢 */@property (nonatomic, assign) double price;/** 重量 */@property (nonatomic, assign) double weight;@end
- 實現-copyWithZone:方法 - 建立新對象 - 給新對象的屬性賦值
#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
KVC
- 全稱:Key Value Coding(索引值編碼)
- 賦值
// 能修改私人成員變數- (void)setValue:(id)value forKey:(NSString *)key;- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
// 能取得私人成員變數的值- (id)valueForKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)keyPath;- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
KVO
- 全稱:Key Value Observing(索引值監聽)
- 作用:監聽模型的屬性值改變
- 步驟
// 為對象a添加一個觀察者(監聽器) // Observer:觀察者(監聽器) // KeyPath:屬性名稱(需要監聽哪個屬性) [a addObserver:b forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"test"];
- 在監聽器中實現監聽方法
/** * 當利用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); }
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
iOS中的copy ,kvc,kvo