Foudation架構之一些常用結構體和常用類

來源:互聯網
上載者:User

表示範圍作用的結構體: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()

 
表示字串的類NSString
NSString *heigth =[NSString stringWithFormat : @"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;


集合家族:
NSArray:用來儲存物件的有序列表(任意類型的對象)
限制:只能儲存Objective—C 的對象,不能儲存C 語言的基礎資料型別 (Elementary Data Type)(int、float、enum、struct、或者NSArray 中的隨機指標)。同時也不能儲存nil(對象的零值或NULL 值)

 
//建立一個新的NSArray

NSArray *array =[NSArray arrayWithObjects : @"one",@"two", nil];

 
//獲得包含的對象個數
- (unsigned)count;

 
//獲得特定索引處的對象
- (id)objectAtIndex :( unsigned int)index ;

 
切分數組:
使用componentsSeparatedByString : 來切分NSArray,
NSString *string = @"oop : ack : bork : greeble : ponies" ;
NSArray *chunks = [string componentsSeparatedByString : @":"];


使用componentsJoinedByString : 來合并NSArray 中的元素並建立字串
string = [chunks componentsJoinedByString :@":-)"] ;


NSArray 是不可變數組,數組中包含的對象是可以改變的,但是數組對象本身是不會改變的。

 
可變數組NSMutableArray 通過類方法arrayWithCapacity :來建立可變數組
+ (id)arrayWithCapacity :( unsigned)numItems ;
NSMutableArray *array = [NSMutableArray arrayWithCapacity : 17];


使用addObject : 在數組末尾添加對象
- (void)addObject :( id)anObject


刪除特定索引的對象
- (void)removeObjectAtIndex :( unsigned)index;


註:可變數組還可以在特定索引處插入對象,替換對象,為數組排序,NSArray 還提供了大量好用的功能。
枚舉:
NSEnumerator 用來描述這種集合迭代器運算的方法:
要想使用NSEnumerator,需要通過objectEnumerator 向數組請求列舉程式:
- (NSEnumerator *) objectEnumerator;


可以像這樣使用這個方法:
NSEnumerator *enumerator;
enumerator = [array objectEnumerator ];


註:若想從後向前枚舉集合,使用方法reverseobjectEnumerator ; 也可以使用。
獲得列舉程式以後,開始while 迴圈,每次迴圈都向這個列舉程式請求它的nextObject
- (id)nextObject;//返回nil 表明迴圈結束
註:在枚舉的過程中不能改變數組容器。


快速枚舉樣本:
for(NSString *string in array){
NSLog(@"I found %@", string);
}


數組排序:
例如:一條記錄就是一條卡片的資訊,包括(NSString *name 和NSString *email)
-(void)sort
{
[book sortUsingSelector:@selector(compareNames:)]
}

其中:
@selector(compareNames:)
//建立一個SEL 類型的selector,sortUsingSelector:使用該方法比較數組中的兩個元素,
sortUsingSelector:方法需要完成這樣的比較,它先調用這個指定的selector 方法,然後向數組(接受 者)的第一條記錄發送訊息,比較其參數和此記錄。指定方法的傳回值為NSComparisonResult 類型,返 回值為:若小於返回NSOrderedAscending;相等返回NSOrderedSame;大於返回NSOrderedDescending

 
-(NSComparisonResult)compareNames:(id)element
{
return [name compare:[element name]];
}


NSDictionary:(關鍵字和定義的組合)
NSDictionary 通常在給定一個關鍵字(通常是一個NSString 字串)下儲存一個數值(可以是任何類 型的對象)。然後你可以使用這個關鍵字尋找相應的數值。

 
使用dictionaryWithObjectsAndKeys :來建立字典
+ (id)dictionaryWithObjectsAndKeys :( id)firstObject , . . .


例如:
Tire *t1 = [Tire new];
NSDictionary *tires = [ NSDictionary dictionaryWithObjectsAndKeys :t1,@"front-left",nil];


使用方法objectForKey :來擷取字典中的值
- (id)objectForKey :( id)akey;


尋找輪胎可以這樣:
Tire *tire = [tires objectForkey : @"front-left"];
建立新的NSMutableDictionary 對象,向類NSMutableDictionary 發送dictionary 訊息。也可以使用 dictionaryWithCapacity : 方法來建立新的可變字典
+ (id)dictionaryWithCapacity :(unsigned int)numItems ;
可以使用方法setObject :forKey :方法給字典添加元素
setObject : forKey :( id)aKey


下面是另一種使用發送dictionary 訊息來建立字典的方法:
NSMutableDictionary *tires;
tires = [NSMutableDictionary dictionary] ;
[tires setObject :t1 forKey :@"front-left"];
. . .
註:若對字典中已有的關鍵字使用setObject :forKey :方法,則用新的替換
可以使用removeObjectForKey : 方法來刪除可變字典中的一個關鍵字
- (void)removeObjectForKey :(id)aKey ;
註:不要去建立NSString、NSArray 或NSDictionary 的子類,實在要的話可以用複合的方式來解決問題。


使用這種方法枚舉詞典:
for(NSString *key in g)
{
. . .
}


集合對象:
Set 是一組單值對象的集合,有可變和不可變,操作包括:搜尋、添加、刪除集合中的成員(僅用於可變集合)、比較兩個集合,計算兩個集合的交集和並集等。
#import <Foundation/NSSet.h>
常用的NSSet 方法

方法

說明

+(id)setWithObjects:obj1,obj2,...,nil

使用一列對象建立新集合

-(id)initWithObjects:obj1,obj2,...,nil

使用一列對象初始化新分配的集合

-(NSUInteger)count

返回集合的成員個數

-(BOOL)containsObject:obj

確定集合是否包含obj

-(BOOL)member:obj

使用isEqual:方法確定集合是否包含obj

-(NSEnumerator *)objectEnumerator

為集合中的所有對象返回一個NSEnumerator 對象

-(BOOL)isSubsetOfSet:nsset

確定receiver 的每個成員是否都出現在nsset 中

-(BOOL)intersectsSet:nsset

確定是否receiver 中至少一個成員出現在對象nsset 中

-(BOOL)isEqualToSet:nsset

確定兩個集合是否相等


常用的NSMutableSet 方法(NSSet 的子類)
方法 說明

-(id)setWithCapacity:size

建立新集合,使其具有儲存size 個成員的初始空間

-(id)initWithCapacity:size

將新分配的集合設定為size 個成員的儲存空間

-(void)addObject:obj

將對象obj 添加到集合中

-(void)removeObject:obj

從集合中刪除對象obj

-(void)removeAllObjects

刪除接受者的所有成員

-(void)unionSet:nsset

將對象nsset 的所有成員昂添加到接受者

-(void)minusSet:nsset

從接受者中刪除nsset 的左右成員

-(void)intersectSet:nsset

將接受者中的所有不屬於nsset 的元素刪除


註:NSInteger 不是一個對象,基礎資料型別 (Elementary Data Type)的typedef,被typedef 成64 位元的long 或32 位int 各種數值:  
NSNumber:
可以使用對象來封裝基本數值。  
NSNumber 類來封裝基礎資料型別 (Elementary Data Type)。
+ (NSNumber *)numberWithChar :( char)value ;
+ (NSNumber *)numberWithInt :( int )value ;
+ (NSNumber *)numberWithFloat :( float)value ;
+ (NSNumber *)numberWithBool :( BOOL)value ;  
還有包括無符號版本和各種long 型資料及long long 整型資料
例如:NSNumber *number = [NSNumber numberWithInt : 42] ;  
將一個基本類型封裝到NSNumber 後,可以使用下列方法重新獲得:
方法說明
+(id)setWithObjects:obj1,obj2,...,nil 使用一列對象建立新集合
-(id)initWithObjects:obj1,obj2,...,nil 使用一列對象初始化新分配的集合
-(NSUInteger)count 返回集合的成員個數
-(BOOL)containsObject:obj 確定集合是否包含obj
-(BOOL)member:obj 使用isEqual:方法確定集合是否包含obj
-(NSEnumerator *)objectEnumerator 為集合中的所有對象返回一個
NSEnumerator 對象
-(BOOL)isSubsetOfSet:nsset 確定receiver 的每個成員是否都出現在
nsset 中
-(BOOL)intersectsSet:nsset 確定是否receiver 中至少一個成員出現
在對象nsset 中
-(BOOL)isEqualToSet:nsset 確定兩個集合是否相等
方法說明
-(id)setWithCapacity:size 建立新集合,使其具有儲存size 個成員的初始空間
-(id)initWithCapacity:size 將新分配的集合設定為size 個成員的儲存空間
-(void)addObject:obj 將對象obj 添加到集合中
-(void)removeObject:obj 從集合中刪除對象obj
-(void)removeAllObjects 刪除接受者的所有成員
-(void)unionSet:nsset 將對象nsset 的所有成員昂添加到接受者
-(void)minusSet:nsset 從接受者中刪除nsset 的左右成員
-(void)intersectSet:nsset 將接受者中的所有不屬於nsset 的元素刪除
- (char)charValue;
- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
- (NSString *)stringValue;  
NSValue:
NSNumber 實際上是NSValue 的子類,NSValue 可以封裝任意值。可以用NSValue 將結構放入NSArray 和NSDictionary 中。
建立新的NSValue:
+(NSValue *)valueWithBytes : (const void *) value objCType : (const char *)type;
@encode 編譯器指令可以接受資料類型的名稱並為你產生合適的字串。
NSRect rect = NSMakeRect(1,2,30,40);
NSValue * value ;
value = [NSValue valueWithBytes : &rect objCType : @encode(NSRect)];  
使用getValue :來提取數值(傳遞的是要儲存這個數值的變數的地址)(先找地址再取值)
value = [array objectAtIndex : 0];
[ value getValue : & rect ] ;
註:Cocoa 提供了將常用的struct 型資料轉化成NSValue 的便捷方法:
+ (NSValue *)valueWithPoint :( NSPoint)point ;
+ (NSValue *)valueWithSize :( NSSize)size;
+ (NSValue *)valueWithRect :( NSRect)rect ;
- (NSSize)sizeValue;
- (NSRect)rectValue;
- (NSPoint)pointValue;
NSNull:
在關鍵字下如果屬性是NSNull 表明沒有這個屬性,沒有數值的話表明不知道是否有這個屬性。[NSNull null] //總返回一樣的值
+ (NSNull *)null;
例如:
[contast setObject : [NSNull null] forKey: @"home"];
訪問它:
id home = [contast objectForKey : @"home" ] ;
if ( home = = [NSNull null] ) {
. . .
}
NSFileManager 允許對檔案系統進行操作(建立目錄、刪除檔案、移動檔案或擷取檔案資訊)
//建立一個屬於自己的NSFileManager 對象
NSFileManager *manager = [NSFileManager defaultManager] ;
//將代字元‘~’替換成主目錄
NSString *home = [@"~" stringByExpandingTildeInPath] ;
//輸出檔案的副檔名
- (NSString *)pathExtension

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.