Foundation架構主要定義了一些基礎類,供程式員來使用。Foundation架構中的所有類都繼承自NSObject這個對象。
一、資料類型:
1、表示範圍作用的結構體: NSRange :
有三種方式建立新的 NSRange
(1)、 NSRange range ;
range.location = 17;
range.length = 4;
(2)、 NSRange range = {17, 4} ;
(3)、 NSRange range =NSMakeRange ( 17 , 4 ); (推薦)
表示用來處理幾何圖形的資料類型:NSPoint (點坐标)和 NSSize (長度和寬度)還有一個矩形資料類型(由點和大小複合而成)NSRect。
Cocoa 提供建立這些資料類型方法:NSMakePoint ()、 NSMakeSize ()和NAMakeRect ()
2、表示字元串的類 NSString
NSString *heigth = [ NSStringstringWithFormat : @"You heigth is %d feet,%d inches", 5,11 ];
建立的類對象包含了指向超類的指針、類名和指向類方法的清單的指針。類對象還包含一個long的資料,為新建立的類對象指定大小。
傳回字元串中的字元的個數:
unsigned int length =[heigth length];
傳回 Bool 值的字元串比較函數:
- (BOOL) isEqualToString : ( NSString * ) aString;// 比較兩個字元串的内容是否相等
還可以使用 compare :方法
- ( NSComparisonResult ) compare :( NSString * ) string;// 逐個字元比較
不區分大小寫的比較:
- ( NSComparisonResult ) compare :( NSString * ) string options :( unsigned ) mask ;
注意:NSComparisonResult 是一個枚舉值
options 是一個位掩碼,即:
NSCaseInsensitiveSearch :不區分大小寫
NSLiteralSearch : 進行完全比較,區分大小寫
NSNumericSearch : 比較字元串的字元個數,而不是字元值
檢查字元串是否以另一個字元串開頭
- ( BOOL ) hasPrefix : (NSString *)aString;
判斷字元串是否是以另一個字元串結尾
- ( BOOL ) hasSuffix : (NSString *)aString;
如果你想知道字元串内的某處是否包含其他字元串,使用 rangeOfString : 方法
- ( NSRange ) rangeOfString :( NSString * ) aString ;
NSString 是不可變的,NSMutableString 是可變的。用方法 stringWithCapacity :來建立
NSMutableString *string =[NSMutableString stringWithCapacity : 42];
可以使用 appendString :或 appendFormat : 來附加新字元串:
- (void) appendString : ( NSString * ) aString ;
- (void) appendFormat : ( NSString * ) format , . . . ;
可以使用deleteCharactersInRange : 方法删除字元串中的字元
- (void) deleteCharactersInRange : ( NSRange ) range ;
二、集合家族:
1、NSArray :用來存儲對象的有序清單(任意類型的對象)
(1)限制:隻能存儲 Objective — C 的對象,不能存儲 C 語言的基本資料類型( int 、float 、enum 、struct中的随機指針)。同時也不能存儲 nil (對象的零值或 NULL 值)
(2)// 建立一個新的 NSArray
NSArray *array = [ NSArrayarrayWithObjects : @"one",@"two", nil ];
// 獲得包含的對象個數
- ( unsigned ) count ;
// 獲得特定索引處的對象
- ( id ) objectAtIndex :( unsigned int ) index ;
(3)切分數組:使用 componentsSeparatedByString : 來切分 NSArray ,
NSString*string = @"oop : ack : bork : greeble : ponies" ;
NSArray*chunks = [string componentsSeparatedByString : @":"];
(4)使用 componentsJoinedByString : 來合并 NSArray 中的元素并建立字元串
string= [chunks componentsJoinedByString : @":-)"] ;
(5)NSArray 是不可變數組,數組中包含的對象是可以改變的,但是數組對象本身是不會改變的。
(6)可變數組 NSMutableArray 通過類方法 arrayWithCapacity :來建立可變數組
+ ( id )arrayWithCapacity :( unsigned ) numItems ;
NSMutableArray*array = [NSMutableArray arrayWithCapacity : 17];
使用 addObject : 在數組末尾添加對象
- ( void )addObject :(id)anObject
删除特定索引的對象
- ( void )removeObjectAtIndex:(unsigned)index;
注:可變數組還可以在特定索引處插入對象,替換對象,為數組排序, NSArray 還提供了大量好用的功能 。
2、枚舉:NSEnumerator 用來描述這種集合疊代器運算的方法:
(1)要想使用 NSEnumerator ,需要通過 objectEnumerator 向數組請求枚舉器:
-(NSEnumerator *) objectEnumerator;
可以像這樣使用這個方法:
NSEnumerator*enumerator ;
enumerator= [array objectEnumerator ];
注:若想從後向前枚舉集合,使用方法 reverseobjectEnumerator ; 也可以使用。
(2)獲得枚舉器以後,開始 while 循環,每次循環都向這個枚舉器請求它的 nextObject
- (id )nextObject ;// 傳回nil 表明循環結束
注:在枚舉的過程中不能改變數組容器。
(3)快速枚舉示例:
for(NSString *string in array ) {
NSLog(@"I found %@", string );
}
3、數組排序:
例如:一條記錄就是一條卡片的資訊,包括( NSString *name 和 NSString *email )
- ( void ) sort
{
[booksortUsingSelector:@selector(compareNames:)]
}
其中:
@selector(compareNames:)
//建立一個 SEL類型的 selector ,sortUsingSelector: 使用該方法比較數組中的兩個元素,sortUsingSelector: 方法需要完成這樣的比較,它先調用這個指定的 selector 方法,然後向數組(接受者)的第一條記錄發送消息,比較其參數和此記錄。指定方法的傳回值為 NSComparisonResult 類型,傳回值為:若小于傳回NSOrderedAscending ;相等傳回 NSOrderedSame ;大于傳回 NSOrderedDescending
-(NSComparisonResult)compareNames:(id)element
{
return[name compare:[element name]];
}
4、NSDictionary :(關鍵字和定義的組合)
(1)NSDictionary 通常在給定一個關鍵字(通常是一個 NSString 字元串)下存儲一個數值(可以是任何類型的對象)。然後你可以使用這個關鍵字查找相應的數值。
使用 dictionaryWithObjectsAndKeys :來建立字典
+ ( id ) dictionaryWithObjectsAndKeys :( id ) firstObject , . . .
例如:
Tire*t1 = [Tire new];
NSDictionary*tires = [ NSDictionary dictionaryWithObjectsAndKeys :t1,@"front-left",nil];
(2)使用方法 objectForKey :來擷取字典中的值
- ( id ) objectForKey :( id ) akey ;
查找輪胎可以這樣:
Tire*tire = [tires objectForkey : @"front-left"];
(3)建立新的 NSMutableDictionary 對象,向類 NSMutableDictionary 發送 dictionary 消息。也可以使用dictionaryWithCapacity : 方法來建立新的可變字典
+ ( id ) dictionaryWithCapacity : ( unsigned int ) numItems ;
可以使用方法 setObject : forKey :方法給字典添加元素
setObject: forKey:( id ) aKey
(4)下面是另一種使用發送 dictionary 消息來建立字典的方法:
NSMutableDictionary*tires ;
tires= [NSMutableDictionary dictionary] ;
[tiressetObject : t1 forKey : @"front-left"];
.. .
注:<1>若對字典中已有的關鍵字使用 setObject : forKey :方法,則用新的替換
<2>可以使用removeObjectForKey : 方法來删除可變字典中的一個關鍵字
- ( void ) removeObjectForKey : ( id ) aKey ;
<3>不要去建立 NSString 、 NSArray 或 NSDictionary 的子類,實在要的話可以用複合的方式來解決問題。
使用這種方法枚舉詞典:
for(NSString *key in g )
{
.. .
}
5、集合對象:
(1)、Set 是一組單值對象的集合,有可變和不可變,操作包括:搜尋、添加、删除集合中的成員(僅用于可變集合)、比較兩個集合,計算兩個集合的交集和并集等。
#import<Foundation/NSSet.h>
常用的 NSSet 方法
方法 說明
+ ( id ) setWithObjects:obj1,obj2,...,nil 使用一列對象建立新集合
- ( id ) initWithObjects:obj1,obj2,...,ni l 使用一列對象初始化新配置設定的集合
- ( NSUInteger ) count 傳回集合的成員個數
- ( BOOL ) containsObject : obj 确定集合是否包含 obj
- ( BOOL ) member : obj 使用isEqual :方法确定集合是否包含 ob j
- ( NSEnumerator * ) objectEnumerator 為集合中的所有對象傳回一個NSEnumerator對象
- ( BOOL ) isSubsetOfSet : nsset 确定 receiver 的每個成員是否都出現在nsset中
- ( BOOL ) intersectsSet : nsset 确定是否 receiver 中至少一個成員出現在對象 nsset 中
- ( BOOL ) isEqualToSet : nsset 确定兩個集合是否相等
(2)常用的 NSMutableSet 方法( NSSet 的子類)
注: NSInteger 不是一個對象,基本資料類型的 typedef ,被 typedef 成 64 位的long 或 32 位 int
方法 說明
- ( id ) setWithCapacity:size 建立新集合,使其具有存儲 size 個成員的初始空間
- ( id ) initWithCapacity:siz e 将新配置設定的集合設定為 size 個成員的存儲空間
- ( void ) addObject:obj 将對象 obj 添加到集合中
- ( void ) removeObject:obj 從集合中删除對象 obj
- ( void ) removeAllObjects 删除接受者的所有成員
- ( void ) unionSet:nsset 将對象 nsset 的所有成員昂添加到接受者
- ( void ) minusSet:nsset 從接受者中删除 nsset 的左右成員
- ( void ) intersectSet:nsset 将接受者中的所有不屬于 nsset 的元素删除