天天看點

OC:Foundation架構

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 的元素删除