KVC/KVO????????????????????????????????????
????????第wangzz ????????????????第http://blog.csdn.net/wzzvictory/article/details/9674431 ???????????????????????????? ????????????????????????????????????????到⽣生增????????????????????????????????????????????????⼿手????wangzzstrive???? ????????????增????????等
????????第 1????????????????????????你KVC/KVO????????????增????????????????????????看????????????????????????真以???????? ????⾏行 2????????????KVO????????????????增????对????????KVC????????????????????????增????????????????????????????KVC???? ????⾏行
????????????????
KVC/KVO????中种????开就????????????????????增????Cocoa????????????????????????????微NSObject???? ????????????NSKeyValueCoding/NSKeyValueObserving????????就样????????????就???????????????? ????????????????????????????????⾏行????样????????????????????????增KVC/KVO???????????????????????????????????????????? ????????主????????????????????????????⾏行 ????????增KVC/KVO????????????????????????Objective-C????????⼤大????????runtime增???????????????????????? ????????????????????????只⾏行 ⼼心????增KVC/KVO????????????????????⽽而????家????????????????????增????????????????????????????????学⾏行
1????KVC????????
????????????Key-value coding增????全????之得????????⾏行????????????????增????时????????????????????map
????????????经活⾏行????????????????????????????????????⼒力觉????????????⽽而????家????????????⽽而????????????????????????两 ????????????????????⾏行
2????KVO????????
????????????Key-value observing增????全????之得中种⾏行????????????????????????????????????????????????????
还的????????????????????????????????????????????????????⾏行????MVC????????????????????Cocoa????增KVO????????????
⾃自????????????model????controller????????????????????????⾏行
????????KVC????????????????
1????Key????Key Path
KVC????????????????????????????????⽽而????????????????????????????????增????????????????⽽而????????????????????????????第 [java] view plaincopy
1. #$(id)valueForKey:(NSString$*)key;$$
2. #$(void)setValue:(id)value$forKey:(NSString$*)key;$$
3. #$(id)valueForKeyPath:(NSString$*)keyPath;$$
4. #$(void)setValue:(id)value$forKeyPath:(NSString$*)keyPath;$$
????????????????????????????????????Key????????????????????增????????????⽽而????????????????????????????????????????⼒力觉⾏行 ????????????????????????????????????KeyPath????????????????????给????⼒力动????????????????⽽而????????????????在???????? ????????????⼒力觉情????⾏行????????KeyPath address.street????????⽽而????是????????????????????????????⽆无???? address????????????????⽆无????????????street????????⾏行????????KeyPath???????????????????????????????????????????? ????给????⽽而????时????????????????????????????????⼈人????????????????⼒力觉⾏行
2????????????????????KVC
????????????????⽽而????家????????????????????增????????????来????????KVC⽽而????????????????????????????????????增???????? ????????????????????????⾏行????????????????⽽而????????????????????????????增????来????????????????????增????????KVC???????? ????????????⾏行明????????????????????????????????????????????第KVC????????⽽而????????????得⾏行???? 3????????????????????????????To-Many???????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????明To-One????,????????Person???????????? name????????增????????????????????????????????????⾏行????????????????????????????????????增????????Person???????????? ????friendsName????????增????????????⼦子????明????Objective-C????????????????NSArray增NSSet ????????增????说????????????????????????????????????????????????????⾏行 ????给????????????????????????????????????????????????增????????????????????????????第
????????????给????
有????????KVC????????????????⼦子????????????增????????????????⼦子????????????给????⼦子????????????????????⾏行
????????????给????
????????????????????????????????????????????????开发增????????????????????后????????⼀一就????????????????????????????????????
⽽而????⼦子????????????????????????????不????⾏行
????情⼦子????????????????????????????第
[java] view plaincopy
-
#countOf<Key>$$
-
//????????????????????????????????NSArray????????????????????count:$$
-
#objectIn<Key>AtIndex:$$
-
#<key>AtIndexes:$$
-
//????????????????????????????????????????????????????$NSArray$????????
????$objectAtIndex:$????$objectsAtIndexes:$$
-
#get<Key>:range:$$
-
//????????????????????????????????????????????????????????????????????????????????????????????$NSArray$???? ????$getObjects:range:$$
-
$$
-
#insertObject:in<Key>AtIndex:$$
-
#insert<Key>:atIndexes:$$
-
//????????????????????????????????????????????????$NSMutableArray$????????
????$insertObject:atIndex:$????$insertObjects:atIndexes:$$
-
#removeObjectFrom<Key>AtIndex:$$
-
#remove<Key>AtIndexes:$$
-
//????????????????????????????????????????????????$NSMutableArray$????????
????$removeObjectAtIndex:$????$removeObjectsAtIndexes:$$
-
#replaceObjectIn<Key>AtIndex:withObject:$$
-
#replace<Key>AtIndexes:with<Key>:$$
-
//????????????????????????????????????????????????????????????????????????????????????????????????????????$$
????情⼦子????????????????????????????第
[java] view plaincopy
-
#countOf<Key>$$
-
//????????????????????????????????NSArray????????????????????count:$$
-
#objectIn<Key>AtIndex:$$
-
#<key>AtIndexes:$$
-
//????????????????????????????????????????????????????$NSArray$????????
????$objectAtIndex:$????$objectsAtIndexes:$$
-
#get<Key>:range:$$
-
//????????????????????????????????????????????????????????????????????????????????????????????$NSArray$???? ????$getObjects:range:$$
-
$$
-
#insertObject:in<Key>AtIndex:$$
-
#insert<Key>:atIndexes:$$
-
//????????????????????????????????????????????????$NSMutableArray$????????
????$insertObject:atIndex:$????$insertObjects:atIndexes:$$
-
#removeObjectFrom<Key>AtIndex:$$
-
#remove<Key>AtIndexes:$$
-
//????????????????????????????????????????????????$NSMutableArray$????????
????$removeObjectAtIndex:$????$removeObjectsAtIndexes:$$
-
#replaceObjectIn<Key>AtIndex:withObject:$$
-
#replace<Key>AtIndexes:with<Key>:$$
-
//????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????$$
????????????????????????????????????????????????????增????????????????????????????????????????????????????增???????????????????????? ????⽤用都增????????????????????????????????⾏行得????在????????????增????????友???????????????????????????????????????????? 个????????????就样????????????就????????增????????????????????????在我????????????????????⾏行 4????????????????????????Key-Value Validation???? KVC????????????们????Key????????????Value????????????????????????????第
[java] view plaincopy
1. #$(BOOL)validateValue:(inout$id$*)ioValue$forKey:
(NSString$*)inKey$error:(out$NSError$**)outError;$$
????????????很????????????????????????????????????????????⼀一就????????????第
[java] view plaincopy
1. #$(BOOL)validate<Key>:error:$$
????????????????name????????????????????????第 [java] view plaincopy
-
#(BOOL)validateName:(id$*)ioValue$error: (NSError$*$__autoreleasing$*)outError${$$
-
$$$$//$Implementation$specific$code.$$
-
$$$$return$...;$$
-
}$$
????????????????????????????????????然????????????????⾏行
????????在????????????增KVC????????????????????????????之得们????????????????增????????????????????????????????????们
????⾏行????????????????真以增????????CoreData????????????????????⾏行
5????KVC????????????????????????????????????????????????????
????????????????????????????????????????得????????如????????????????着增????????????????????????????????????????????????次⾏行
????????????????KVC????????????????????????????????????????????????????????⾏行KVC????????????????????????????得????????如
????????????????着????????????????????????NSNumber????NSValue????????增????????????⾃自????????不????⾏行
????????两????增Person????????????????NSInteger????????????age????????
????还的得
????????????????KVC真以????????????????????就想????age????????????得第 [java] view plaincopy
1. [person$setValue:[NSNumber$numberWithInteger:5]$forKey:@"age"];$$
????????????????age????????????????NSNumber????????增KVC????????????????????NSNumber????????????也 ????NSInteger????????增????????????????????????????????⽽而????家????????想????age????得⾏行
????????????得 ????????增????????????????就????????age????????得第
[java] view plaincopy
1. [person$valueForKey:@"age"];$$
????????增????????NSNumber????????就????????age????得⾏行
????????????????????????增????????????????????????????????NSNumber增????????????????????????????????NSValue意
间????????NSNumber????????
????????????????NSNumber????????着????????????第 [java] view plaincopy
-
+$(NSNumber$*)numberWithChar:(char)value;$$
-
+$(NSNumber$*)numberWithUnsignedChar:(unsigned$char)value;$$
-
+$(NSNumber$*)numberWithShort:(short)value;$$
-
+$(NSNumber$*)numberWithUnsignedShort:(unsigned$short)value;$$
-
+$(NSNumber$*)numberWithInt:(int)value;$$
-
+$(NSNumber$*)numberWithUnsignedInt:(unsigned$int)value;$$
-
+$(NSNumber$*)numberWithLong:(long)value;$$
-
+$(NSNumber$*)numberWithUnsignedLong:(unsigned$long)value;$$
-
+$(NSNumber$*)numberWithLongLong:(long$long)value;$$
-
+$(NSNumber$*)numberWithUnsignedLongLong:(unsigned$long$long)value;$$
-
+$(NSNumber$*)numberWithFloat:(float)value;$$
-
+$(NSNumber$*)numberWithDouble:(double)value;$$
-
+$(NSNumber$*)numberWithBool:(BOOL)value;$$
-
+$(NSNumber$*)numberWithInteger:
(NSInteger)value$NS_AVAILABLE(10_5,$2_0);$$
-
+$(NSNumber$*)numberWithUnsignedInteger:
(NSUInteger)value$NS_AVAILABLE(10_5,$2_0);$$
????????????????????????????????????????得????????着⾏行 ????????????NSValue????????
NSValue????????????????????????????如????????????????着增????????????????????????????????⼦子????????如????????????第 [java] view plaincopy
-
+$(NSValue$*)valueWithCGPoint:(CGPoint)point;$$
-
+$(NSValue$*)valueWithCGSize:(CGSize)size;$$
-
+$(NSValue$*)valueWithCGRect:(CGRect)rect;$$
-
+$(NSValue$*)valueWithCGAffineTransform:
(CGAffineTransform)transform;$$
-
+$(NSValue$*)valueWithUIEdgeInsets:(UIEdgeInsets)insets;$$
-
+$(NSValue$*)valueWithUIOffset:
(UIOffset)insets$NS_AVAILABLE_IOS(5_0);$$
????????????????????6????????????等????????????????????????????????????????如????????????会意????????????增????????????如 ????????????????????????????????NSValue????????????增????????????????????????了????????????????????????去????????第 http://blog.csdn.net/wzzvictory/article/details/8614433 6????????????????????????????Collection Operators????
⼦子????????????⼒力????????????????被????Key Path增????????????????了????????果????valueForKeyPath第 ????????增????????????????????????????????????增????????????????????valueForKey:????????????????????????情话⽅方⾏行 ????????⼒力????????????????@????????????????被????⼒力觉增⼀一就????????????????要第
????么????⼦子????????????⼒力
么????⼦子????????????⼒力????????@avg增@count增@max增@min增@sum5????增????????要????
????????????????????????增不????????????????????????????????⾏行
????????????⼦子????????????????????第transactions增????说????????????????????????Transaction????????????
两增????????????????????????????第payee增amount增date⾏行????????????????????两????????????????????????????
????????????⼒力第
????????????amount????????什得????????????????第 [java] view plaincopy
1. NSNumber$*transactionAverage$=$[transactions$valueForKeyPath:@"@avg .amount"];$$
????????????transactions⼦子????????????????????不????????????????第 [java] view plaincopy
1. NSNumber$*numberOfTransactions$=$[transactions$valueForKeyPath:@"@c ount"];$$
????????????????????????增@count????????????⼦子????????????⼒力????????????????被????????????增????????????????????????
????????增????????????????????????????⾏行
????????????????????⼒力
????⼦子????????????⼒力????????能点增????????????和????????就????????在????????????????增????????????????????第
[java] view plaincopy
1. @distinctUnionOfObjects$$
2. @unionOfObjects$$ ????????????????????得????????NSArray增新????????????????????????????????????????????三????????增????????????????????
????????????⽂文????????????????????????????????????⼦子⾏行 ????????????????第
[java] view plaincopy
1. NSArray$*payees$=$[transactions$valueForKeyPath:@"@distinctUnionOfO bjects.payee"];$$
2. NSArray$*payees$=$[transactions$valueForKeyPath:@"@unionOfObjects.p ayee"];$$
????????????????????好????????机????????????????能????????????????????增????????????????????????????????????好????????机 ????⾏行
间Array????Set给????⼒力
????????????????????能点????增????????????⼦子????????????⽆无⼦子????????????????增????????现????????????????????????上????
????第
[java] view plaincopy
1. //$Create$the$array$that$contains$additional$arrays.$$
2. self.arrayOfTransactionsArray$=$[NSMutableArray$array];$$
3. $$$
4. //$Add$the$array$of$objects$used$in$the$above$examples.$$
5. [arrayOfTransactionsArray$addObject:transactions];$$
6. $$$
-
//$Add$a$second$array$of$objects;$this$array$contains$alternate$val ues.$$
-
[arrayOfTransactionsArrays$addObject:moreTransactions];$$
????????????????????????⽆无⼦子????????⼦子????第arrayOfTransactionsArray ????????????????????????????给????arrayOfTransactionsArray????????⽆无????⼦子????????????????????????增????
????????????????????????????????????⼒力第
[java] view plaincopy
1. @distinctUnionOfArrays$$
2. @unionOfArrays$$
3. @distinctUnionOfSets$$
????????????????????????⼦子????????Arrays增????????????????????????⼦子????????Sets⾏行????????Sets???????????????????? ????????????三????????增????????????????????????????@unionOfSets????????⼒力⾏行
????????????????????????两????????第
[java] view plaincopy
1. NSArray$*payees$=$[arrayOfTransactionsArrays$valueForKeyPath:@"@uni
onOfArrays.payee"];$$ ????????????????????????
1????KVC???????????????????????????? KVC????时????????????????????????????⽽而????家????????????????????⾏行????????⽽而????家???????????????????????????????????? ????增????????????????????????????????????增KVC????为????????⽽而????家????????????到⽣生????????????⾏行????????想???? ????????????????????????????????增KVC????出情????????????????真以第 ????做这????????说????-<key>????-is<key>明????????????????????得????????????????????-get<key>????⽽而???? 家????????增????????????????????增????????????????????????????????????得⽂文 做这????????说????????????-set<key>:????????????增????????????????????想????得⾏行????????-get<key>????- set<key>:????????增????????⼈人Key????⼒力觉????????????????????????增????????Cocoa???????????????????????????? ????吧⽂文 ????????????????只????????????????????增????做这????????-_<key>????-_is<key>明????????????????????得???? ????????????-_get<key>????-_set<key>:????????⽂文 间????????????????????????⽽而????家????????增????????????????????????⽽而????????两????????⾏行????两???????????????????????? ????第<key>????_<key>; ????????????????????????????增????????????valueForUndefinedKey:????setValue:forUndefinedKey: ????????⾏行????????????????????很????????????????????????????????????增????????????????????着????????????⼈人????????⾏行 2????KVC/KVO???????????????? 之得????????????之得中种????????着isa-swizzling真以????????????????增????????????着runtime???????? ????????⼤大????????⾏行????????????????上????????成????????????????????去????????第 http://blog.csdn.net/kesalin/article/details/8194240 ????时????????????????????????????????????中种????增????????????????????????????????????⼤大????????????????????????????????知 ????????增????????????知????????????????⼈人????????????????????????中种???????????? setter ????????⾏行 知????????????????????⼈人???? setter ????????????????????????????????????????????增????????????????????????????????之得中 种????????⾏行????????????????????????想???????????????????????? setter ????????增????????????????⼈人???????????????? KVO ????????????????????????????⾏行????????????????????????????????主每 KVO ????????????想????????就???????????????? ????得增????????那????????????还的????????????????????????????????????增???????????????????? KVO ????⾏行 ????????知????????????????⼈人???? class ????????????“????更”????????????????????????????????????地????????????????⾏行???? ???????????????????????????????????? isa 在????在????????????????才????????知????????增????????????????????????????????????
????知????????????????????????增???????????????????????????????? setter ????????????????????????????????⼈人???? setter增 ????????没????之得????????????????⾏行????????增知????????????????⼈人???? dealloc ????????????学????看微⾏行 ????????⼈人????????????增????????????????学????????两????增????????????????????????????⾏行 ????????????????????????去????????Objective-C????????????????????????????第 http://blog.csdn.net/wzzvictory/article/details/8592492 ????????????????增isa在????在????????????????????????????????????增????????????????????????????????第Person增???? ????????runtime????的????????????????????????????????第NSKVONotifying_Person⾏行 ????????NSKVONotifying_Person????????????⼈人????????????????第 ????????????????????????????????????????????set????????增class增dealloc增_isKVOA⾏行
????class
????⼈人class????????????????????????????????????????????????????????????????????⼈人下????????????????????????????????????⾏行
????道????????????????第
[java] view plaincopy
1. NSLog(@"self#>isa:%@",self#>isa);$$
2. NSLog(@"self$class:%@",[self$class]);$$ ????????????KVO????????????增????道????????????第
[java] view plaincopy
1. self#>isa:Person$$
2. self$class:Person$$ ????????????KVO????????????????增????道????????????第
[java] view plaincopy
1. self#>isa:NSKVONotifying_Person$$
2. self$class:Person$$ ????????????isa在????????class????????????????????新????增????????????????????????????????????⾏行
????????⼈人set???????? ????????????????⼈人????????????set????????增????????????????set????????????????????⼼心????????????????????????????????第
[java] view plaincopy
1. #$(void)willChangeValueForKey:(NSString$*)key$$
2. #$(void)didChangeValueForKey:(NSString$*)key$$ ????????增didChangeValueForKey:????????????美????????第
[java] view plaincopy
1. #$(void)observeValueForKeyPath:(NSString$*)keyPath$$
2. $$$$$$$$$$$$$$$$$$$$$$ofObject:(id)object$$
3. $$$$$$$$$$$$$$$$$$$$$$$$change:(NSDictionary$*)change$$
4. $$$$$$$$$$$$$$$$$$$$$$$context:(void$*)context$$
????????增????????????KVO????????????????????????等 ????????????????????????????⽽而????家????????增-setValue:forKey????????????????????????????第
[java] view plaincopy
1. #$(void)willChangeValueForKey:(NSString$*)key$$
2. #$(void)didChangeValueForKey:(NSString$*)key$$ ????????????????????????????之得????????对????????????????⾃自????????????????⽽而????????????????????????????增????????????????
????起要????????????只????????????????增????????????????????????KVO等 ????????????????增????????????KVO????????????????????第 1)????????????KVC
????????????KVC增????????????⽽而????家????????增????????????????????????⽽而????家????????????????????will/ didChangeValueForKey:????????⽂文 ????????⽽而????家????????增????????????????????setValue:forKey????????????????????will/ didChangeValueForKey:????????⾏行
2)????⽽而????家????????
????????????????????⼈人⽽而????家????????????????will/didChangeValueForKey:????????⾏行
????????增????????????????⽽而????家????????的????????????得????增KVO????????????????????⾏行
3)起要????????will/didChangeValueForKey:????????⾏行
????????增????????????KVO增????????????will/didChangeValueForKey:????????????????????????⾏行
间_isKVOA
????????????????????????回????????????????可要???????????????????? KVO ????????????????????????⾏行
????????????????????????????
1????????????
????????????????????????????????????么????????????
两????????????????????增????????????????????
????????????分????来????????????????????????
????????????活增????????????AppleScript????分????来????增????????????????????过????????????????????????⾏行
2????????????
KVC????????????????????起增????????????KVO????增????????????????了????????去????????第
http://www.mikeash.com/pyblog/key-value-observing-done-right.html
????????????????????????KVO????????????????????增????????????????????selector????????block????????????????增????????
让????⼈人-addObserver:forKeyPath:options:context:????????????成????????????????????????????⾏行
????????????????????????????????增????????????????????????????????????????MAKVONotificationCenter????增????
????????github:
https://github.com/mikeash/MAKVONotificationCenter
????????????????????????????????????????????????????KVO????多????????增????????????????????信⾏行
了????????????第
http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/
KeyValueCoding/Articles/KeyValueCoding.html#//apple_ref/doc/uid/
10000107-SW1
http://blog.csdn.net/kesalin/article/details/8194240