#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//建立字串
NSString *height;
/**類方法:
+(id) stringWithFormat: (NSString *) format,...
通過格式字串和參數來建立NSString
省略符號(。。。):可以接受多個以逗號分割的參數。
這聲明方法時添加加號(+),那麼這個方法為類方法,不需要建立執行個體就可以調用,通常用於建立心的執行個體,我們稱用來建立新對象的類方法為Factory 方法。
-------------------
objective-c運行時產生一個類的時候,它會建立一個代表該類的類對象。類對象包含了指向超類的指標,類名,和指向類方法列表的指標。類對象還包含一個long型資料,為新建立的類執行個體對象指定大小(以位元組為單位)
類方法可以用來訪問全域資料。
執行個體方法要用前置減號(-)來開始聲明
*/
height=[NSString stringWithFormat:@"you heigh is %d feet,%d inches",5,11];
NSLog(height);
//length 返回字串中字元的個數。-(unsigned int) length;
if([height length]>5){
NSLog(@"height length ------");
}
//字串比較
/**
isEqualToString :可以用來比較接收方和當作參數傳遞來的字串的內容是否相同,返回yes和no
*/
NSString *thing1=@"hello";
NSString *thing2=[[NSString alloc] initWithString:@"hello"];
if([thing1 isEqualToString:thing2]){
NSLog(@"they are same");
}
/**
==:只判斷指標數值,而不是它們所指向的內容
*/
if(thing1==thing2){
NSLog(@"== same");
}
/*
compare:比較兩個字串。區分大小寫
compare將接收對象和傳遞來的字串逐個字元的進行比較,它返回一個NSComparisonResult(枚舉類型)來顯示結果。
typedef enum _NSComparisonResult{
NSOrderedAscending=-1;
NSOrderedsame;
NSOrderedDescending;
} NSComparisonResult;
*/
[thing1 compare:thing2];
if(NSOrderedSame==[thing1 compare:thing2]){
NSLog(@"compare same");
}
//compare:options:
/***
-(NSComparisonResult) compare:(NSString *) string
options:(unsinged) mask;
options 是一個位元遮罩,可以使用|添加選項標記
選項:
NSCaseInsensitiveSearch:不區分大小寫字元
NSLiteralSearch:進行完全比較,區分大小寫
NSNumbericSearch:比較字串的字元個數,而不是字元值
*/
if([thing1 compare:thing2 options:NSCaseInsensitiveSearch|
NSNumericSearch]==NSOrderedSame){
NSLog(@"they match");
}
/**
以某個字串開始或結尾
-(BOOL) hasPrefix:(NSString *) aString;
-(BOOL) hasSuffix:(NSString *) aString;
*/
NSString *fileName=@"aabbbcc";
if([fileName hasPrefix:@"aa"]){
NSLog(@"begin with aa");
}
if([fileName hasSuffix:@"cc"]){
NSLog(@"end with cc");
}
//NSMutableString 可變字串
//SString 是不可變的,一旦NSString 被建立了,我們就不能改變它。
//+(id) stringWithCapacity:(unsinged) capacity; capacity:是給NSMutableString的一個建議,字串的大小並不局限於所提供的大小,這個容量僅是個最優值。
NSMutableString *str=[NSMutableString stringWithCapacity:40];
[str appendFormat:@"sdfsdf%d",5];
[str appendString:@"ssssssss"];
NSLog(str);
//刪除字串
//-(void) deleteCharactersInRange:(NSRange) range;
NSMutableString *ms;
ms=[NSMutableString stringWithCapacity:50];
[ms appendString:@"aabbccdd"];
NSRange range;
range=[ms rangeOfString:@"cc"];
[ms deleteCharactersInRange:range];
NSLog(ms);
//與執行個體方法一樣,繼承對類方法也同樣適用
//------------------集合--------------
//NSArray ,NSDictionary
/**
NSArray 是一個cocoa類,用來儲存物件的有序列表。
NSArray有兩個限制:1,它只能儲存objective-c的對象,而不能儲存c語言中的基礎資料型別 (Elementary Data Type)如int,float,enum,struct,或者nsarray中的隨機指標。2,不能這nsarray中儲存nil
類方法:
arrayWithObjects:建立一個新的nsarray。發送一個以逗號分割的對象列表,這列表結尾添加nil代表列表結束,(這就是不能這nsarray中儲存nil的原因)
*/
NSArray *array=[NSArray arrayWithObjects:@"aa",@"bb",@"cc",nil];
//-(unsigned) count; 取得包含對象的個數
//-(id) objectAtIndex:(unsigned int) index; 取得索引位置的對象
int i;
for (i=0; i<[array count]; i++) {
NSLog(@"index %d has %@",i,[array objectAtIndex:i]);
}
//------------切分數組
//-componentsSeparatedByString:
NSString *ns=@"sdf,dsfs,dfd,fdf,df,dd";
NSArray *comArr=[ns componentsSeparatedByString:@","];
for(int i=0;i<[comArr count];i++){
NSLog(@"componentsSeparatedByString===%@",[comArr objectAtIndex:i]);
}
//componentJoinedByString: 合并nsarray中的元素來建立字串
NSString *joinedStr=[comArr componentsJoinedByString:@"-->"];
NSLog(@"joined---= %@",joinedStr);
//可變數組
NSMutableArray *mutableArr=[NSMutableArray arrayWithCapacity:40];
[mutableArr addObject:@"aa"];
[mutableArr addObject:@"bb"];
[mutableArr addObject:@"cc"];
[mutableArr addObject:@"dd"];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"mutableArr==%@",[mutableArr objectAtIndex:i]);
}
//----- -(void) removeObjectAtIndex:(unsinged) index; 刪除指定索引的對象,
//刪除一個對象之後,數組中並沒有留下漏洞,被刪除對象後面的數組元素的哦被前移來填補空缺
[mutableArr removeObjectAtIndex:2];
for(int i=0;i<[mutableArr count];i++){
NSLog(@"removeObjectAtIndex == %@",[mutableArr objectAtIndex:i]);
}
//枚舉
//NSEnumerator ,它是cocoa用來描述這種集合迭代運輸的方法
//-(NSEnumerator *) objectEnumerator;
NSEnumerator *enumerator=[mutableArr objectEnumerator];
id thingie;
while(thingie=[enumerator nextObject]){
NSLog(@"i found %@",thingie);
}
//快速枚舉
for(NSString *string in mutableArr){
NSLog(@"for in == %@",string);
}
//NSDictionary 字典
/*
NSDictionary 是在給定的關鍵字(通常是一個NSString字串)下儲存一個數值(可以是任何類型的對象)。然後你可以用這個關鍵字來尋找相應的數值。
NSDictionary 是鍵查詢的最佳化儲存方式。它可以立即找出要查詢的資料,而不需要遍曆整個數組進行尋找。
+(id) dictionaryWithObjectAndKeys:(id) firstObject,....;
該方法接收對象和關鍵字交替出現的系列,以nil值作為終止符號。
**/
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"aaa",@"a",@"bbb",@"b",nil];
NSString *dicStr=[dic objectForKey:@"a"];
if([dicStr isEqualToString:@"aaa"]){
NSLog(@"------------00000000000000000");
}
//可變字典
NSMutableDictionary *mutableDic=[NSMutableDictionary dictionaryWithCapacity:50];
[mutableDic setObject:@"1111" forKey:@"1"];
[mutableDic setObject:@"222" forKey:@"2"];
//刪除 -(void) removeObjectForKe:(id) key;
[mutableDic removeObjectForKey:@"2"];
NSArray *keyArr=[mutableDic allKeys];
for(NSString *str in keyArr){
NSLog(@"key== %@",str);
NSLog(@"value== %@",[mutableDic objectForKey:str]);
}
//各種數值,NSNumber NSValue
/*
cocoa 提供了NSNumber類來封裝基礎資料型別 (Elementary Data Type)
+(NSNumber *) numberWithChar:(char) value;
+(NSNumber *) numberWithInt:(int) value;
+(NSNumber *) numberWithFloat:(float) value;
+(NSNumber *) numberWthiBool:(BOOL) value;
-(char) charValue;
-(int) intVlaue;
-(float) floatValue;
-(BOOL) boolValue;
-(NSString *) stringValue;
**/
NSNumber *number;
number=[NSNumber numberWithInt:3];
[mutableDic setObject:number forKey:@"int"];
int num=[[mutableDic objectForKey:@"int"] intValue];
NSLog(@"int object value== %d",num);
//NSValue .NSNumber實際上是NSValue的子類,NSValue可以封裝任意值
/**
+(NSValue *) valueWithBytes:(const void *) value objCType:(const char *) type;
傳遞的參數是你想要封裝的數值的地址,通常,得到的是你想要儲存的變數的地址(在c語言裡適用操作符 & ),你也可以提供一個描述這個資料類型的字串,通常用來說明struct中實體的類型和大小。你不用自己寫代碼
來產生這個字串,@encode編譯器指令可以接受資料類型的名稱並為你產生合適的字串
*/
NSRect rect= NSMakeRect(1, 2, 30, 40);
NSValue *value;
value=[NSValue valueWithBytes:&rect objCType:@encode(NSRect)];
NSMutableArray *mr=[NSMutableArray arrayWithCapacity:50];
[mr addObject:value];
//getValue 提取資料
/**
-(void) getValue:(void *) value; 要傳遞的是儲存這個數值的變數的地址
*/
/***
value=[mr objectAtIndex:0];
NSRect r;
NSLog(@"00000 ===%@",r);
[value getValue:&r];
NSLog(@"111== %@",r);
*/
/**
+(NSValue *) valueWithPoint:(NSPoint) point;
+(NSValue *) valueWithSize:(NSSize) size;
+(NSValue *) valueWithRect:(NSRect) rect;
-(NSPoint) pointValue;
-(NSSize) sizeValue;
-(NSRect) rectValue;
*/
//NSNull
/*
*+(NSNull *) null;
*/
[mutableDic setObject:[NSNull null] forKey:@"fax"];
id fax;
fax=[mutableDic objectForKey:@"fax"];
if(fax==[NSNull null]){
NSLog(@"pppppppppppppppppp");
}
[pool drain];
return 0;
}