Collection類
Collection類的實(shí)例用于保存指向其他對(duì)象的指針册烈。
24.1NSSet/NSMutableSet
NSSet對(duì)象所包含的“內(nèi)容”是無(wú)序的缅疟。而且在一個(gè)NSSet對(duì)象中,某個(gè)特定的對(duì)象只能出現(xiàn)一次。
NSSet對(duì)象的最大用處就是檢查某個(gè)對(duì)象是否存在。例如采郎,你有一組兒童不宜進(jìn)入的網(wǎng)站鏈接,再為小孩打開某個(gè)網(wǎng)頁(yè)時(shí)狂魔,最好先查看相應(yīng)的網(wǎng)頁(yè)是否在這個(gè)兒童不宜組里蒜埋。NSSet對(duì)象完成此類任務(wù)的速度比數(shù)組快的對(duì)。
它也有NSMutableSet
NSSet對(duì)象中的對(duì)象是無(wú)序的最楷,所以不能通過索引來訪問整份,只能向NSSet對(duì)象查詢某個(gè)對(duì)象是否尋找∽阉铮可以使用下面的方法來查詢
-(BOOL) containsObject :(id)x;
NSObject類定義了一個(gè)名為 isEqual:的方法烈评。日過程序要檢查這兩個(gè)對(duì)象是否相等,就可以使用isEqual方法
-(BOOL)isEqual : (id) other
{
return (self == other);
}
在蘋果公司提供的類中犯建,有些覆蓋率isEqual:方法讲冠,例如NSString。覆蓋后的方法會(huì)比較字符串中的字符适瓦。
equal:相等的 字符相等
identical:相同的竿开,同一個(gè)對(duì)象,地址相同玻熙。
24.2NSDictionary/NSMutableDictionary
鍵值對(duì)(key value pair)否彩。健通常是字符串,值可以是任意類型的對(duì)象嗦随。以鍵為索引列荔。·
24.3不可修改對(duì)象
雖然對(duì)外聲明的是NSArray枚尼,但實(shí)際創(chuàng)建的是NSMutableArray
使用不可修改對(duì)象可以節(jié)約內(nèi)存提高性能肌毅。因?yàn)樗肋h(yuǎn)無(wú)序拷貝。
24.4數(shù)組排序
-(void)sortUsingDexcriptors:(NSArray *)sortDescriptors;
NSSortDescriptor *lastAsc = [NSSortDescriptor sortDescriptorWithKey:@"lastName"
ascending:YES];
NSSortDescriptor *voa = [NSSortDescriptor sortDescriptorWithKey:@"valueOfAssets"
ascending:YES];
NSSortDescriptor *eid = [NSSortDescriptor sortDescriptorWithKey:@"employeeID"
ascending:YES];
[employees sortUsingDexcriptors:@[voa,eid]];
24.5過濾
對(duì)Collection進(jìn)行過濾的時(shí)候姑原,程序?qū)?duì)collection對(duì)象和一條邏輯語(yǔ)句進(jìn)行比較,得到一個(gè)合成的collection呜舒,這個(gè)collection只包含滿足這條語(yǔ)句的對(duì)象锭汛。
Foundation中有個(gè)NSPredicate的類。NSPredicate對(duì)象可以包含一條語(yǔ)句,其運(yùn)算結(jié)果可以為“真”或“假”
-(void)filterUsingPredicate:(NSPredicate *)predicate;
//NSArray有一個(gè)名為filteredArrayUsingPredicate:方法唤殴,可以創(chuàng)建一個(gè)新的數(shù)組般婆,能夠“滿足”傳入的NSPredicate對(duì)象的對(duì)象
-(NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"holder.valueOfAsset>70"];
NSArray *toBeReclaimed = [allAssets filteredArrayUsingPredicate:predicate];
Collection對(duì)象與所有權(quán)
向Collection對(duì)象中加入某個(gè)對(duì)象是,collection對(duì)象會(huì)成為該對(duì)象的擁有方朵逝,如果從collection對(duì)象中移除改對(duì)象蔚袍,collection對(duì)象就不再是該對(duì)象的擁有方了。
C語(yǔ)言基本類型
Collection對(duì)象只能保存對(duì)象配名,如果要保存float啤咽,int變量或指向結(jié)構(gòu)的指針,則可以先將這些C語(yǔ)言基本類型封裝成對(duì)象渠脉,再存入collection對(duì)象宇整。
NSMutableArray *list = [[NSMutableArray alloc]init];
[list addObject:@4];
[list addObject:@5.6];
Collection對(duì)象和list
本章所結(jié)束的Collectuion對(duì)象都不能保存nil,如果要將nil加入芋膘。則可以用NSNull類鳞青。
[list addObject:[NSNull null]];