????????高階消息傳遞
當(dāng)對容器使用 KVC 時(shí), valueForKey會直接被傳遞給容器中的每一個(gè)對象,而不是對容器本身進(jìn)行操作。結(jié)果會被添加進(jìn)返回的容器中。
例如:有一個(gè)Person類


創(chuàng)建一個(gè)persons數(shù)組,包含兩個(gè)Person類對象,對persons數(shù)組使用valueForKeyPath方法傳入@"name",會對persons數(shù)組中的p1和p2分別獲取他們的name屬性值并構(gòu)成數(shù)組返回。
????????KVC 中的函數(shù)操作集合
1、簡單集合運(yùn)算符: @avg @count @max @min @sum?
@count:返回一個(gè)值為集合中對象總數(shù)的NSNumber對象。
@sum:首先把集合中的每個(gè)對象都轉(zhuǎn)換為double類型,然后計(jì)算其總,最后返回一個(gè)值為這個(gè)總和的NSNumber對象。
@avg:首先把集合中的每個(gè)對象都轉(zhuǎn)換為double類型,然后計(jì)算其平均值,最后返回一個(gè)值為該平均值的NSNumber對象。
@max:使用compare:方法來確定最大值。所以為了讓其正常工作,集合中所有的對象都必須支持和另一個(gè)對象的比較。
@min:和@max一樣,但是返回的是集合中的最小值。

2、對象運(yùn)算級: @distinctUnionOfObjects @unionOfObjects?
@distinctUnionOfObjects和@unionOfObjects:返回一個(gè)由操作符右邊的keyPath所指定的對象屬性組成的數(shù)組。其中@distinctUnionOfObjects會對數(shù)組去重,而@unionOfObjects不會。

3、Array 和 Set 操作符: @distinctUnionOfArrays @unionOfArrays @distinctUnionOfSets
數(shù)組和集合操作符跟對象操作符很相似,只不過它是在NSArray和NSSet所組成的集合中工作的。
@distinctUnionOfArrays/@unionOfArrays: 返回了一個(gè)數(shù)組,其中包含這個(gè)集合中每個(gè)數(shù)組對于這個(gè)操作符右面指定的key path進(jìn)行操作之后的值。正如你期望的,distinct版本會移除重復(fù)的值
@distinctUnionOfSets:和@distinctUnionOfArrays差不多, 但是它期望的是一個(gè)包含著NSSet對象的NSSet,并且會返回一個(gè)NSSet對象。因?yàn)榧喜荒馨貜?fù)的值,所以它只有distinct操作。
