詳解Objective-C最基礎語法和基礎類型
Objective-C最基礎語法和基礎類型是本文要講解的內容,不多說,我們先來看內容,我對Objective-C了解還不深,只知道一些最基礎的東西,總結一下。
基礎數(shù)據類型
在Objective-C里面也可以使用C的基礎類型,比如int,float等,但一些Objective-C的基礎類型有與C的對應的,看上去很類似,卻提供了更多的功能和特性。比如string和NSString,string就是普通的C語言的字符串,而NSString是一個object,不僅包含了字符串,還有一些跟顯示相關的接口等,你可以直接在屏幕上打印輸出一個NSString,卻不能對string這樣操作。
NSInteger、NSUInteger、CGFloat
這幾個類型跟C里的類型基本是一樣的,但還是稍有不同,這其實是“type define”,比如NSInteger的定義是這樣的:
- #if_LP64_||NS_BUILD_32_LIKE_64
- typedef long NSInteger;
- typedef unsigned long NSInteger;
- #else
- typedef int NSInteger;
- typedef unsigned int NSInteger;
- #endif
也就是說當需要使用int類型的變量的時候,可以像寫C的程序一樣,用int,也可以用NSInteger,但更推薦使用NSInteger,因為這樣就不用考慮設備是32位的還是64位的。
BOOL
OC里面的bool值的取值是YES和NO,而不是TRUE和FALSE。
NSNumber
有人說既然都有了NSInteger等這些基礎類型了為什么還要有NSNumber?它們的功能當然是不同的。
NSInteger是基礎類型,但是NSNumber是一個類。如果想要存儲一個數(shù)值,直接用NSInteger是不行的,比如在一個Array里面這樣用:
- NSArray *array = [[NSArray alloc]init];
- [array addObject:3];//會編譯錯誤
這樣是會引發(fā)編譯錯誤的,因為NSArray里面放的需要是一個類,但‘3’不是。這個時候需要用到NSNumber:
- NSArray *array = [[NSArray alloc]init];
- [array addObject:[NSNumber numberWithInt:3]];
- NSString、NSMutableString
字符串一直是個比較復雜的類型,提供的功能很多,涉及的問題也比較多,比如字符串的比較、格式化、拼接等等,這可以專門開一個專題,這里只是簡單介紹一下。
Objective-C里面有個特殊的符號:“@”,這個符號大概的意思是表示“這是Objective-C的”。在使用NSString的使用雙引號的前面一定要加這個符號,否則就是普通的C字符串。而且NSString是一個類,定義一個NSString的變量的時候要使用指針。比如:
- NSString *str = "a string";//這是錯誤的
- NSString str =@"a string";//這也是錯誤的
- NSString *str = @"a new string";//這是正確的
一個NSString變量賦值了之后不能改變其值(當然可以重新給它賦其他的值),當需要使用可變的字符串的時候可以使用NSMutableString。NSMutableString繼承值NSString,額外提供了一些改變值的方法。比如:
- NSMutableString *str = @"";
- [str appendString:@"hello "];//str = @"hello "
- [str appendFormat:@"my number is:%d",1];//str = @"hello my number is 1"
- NSArray、NSMutableArray
這是OC里面的兩個集合。顧名思義,NSArray的容積是固定的,而NSMutableArray的是可變的,當添加的對象多余容積時會自動擴增。存放入集合中的一定是一個類的實例。 初始化一個NSArray的代碼如:
- NSArray *array = [NSArray arrayWithObjects:obj1,obj2...,nil];//注意要以nil結尾,否則會有編譯警告
NSArray常用的屬性當然就是count了,比如
- NSUInteger count = [array count];//
當要判斷一個集合里面是否包含某個元素的時候需要注意,使用的方法跟.net里面的稍有不同,如:
- if ([array indexOfObject:obj3] == NSNotFound]{
- //do something
- }
- NSMutableArray的使用方法跟NSArray的類似,常用的方法有:
- + (NSMutableArray *)array;
- - (void)addOvject:(id)object;
- - (void)removeObject:(id)object;
- - (void)removeAllObjects;
- - (void)insertObject:(id)object atIndex:(unsigned)index;
- NSDictionary、NSMutableDictionary
OC的字典集合,跟其他語言的字典類似,跟NSArray一樣,當直接調添加若干個對象的初始化方法時,要以nil結尾,比如:
- NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:obj1,@"key1",obj2,@"key2",nil];//注意以nil結尾
當需要判斷是否包含某個元素的時候,不是調用contain方法,而是直接判斷返回的值是不是nil,比如:
- if ([dic objectForKey:@"key3"]){
- //這里的代碼不會執(zhí)行,因為key3返回的是nil
- }
- NSMutableDictionary的使用方法類似,常用的方法有:
- + (NSMultableDictionary *)dictionary;
- - (void)addObject:(id)object forKey:(id)key;
- - (void)removeObjectForKey:(id)key
- - (void)removeAllObjects;
- NSDate
日期和時間。OObjective-C里面的日期類使用起來比較復雜,即使是實現(xiàn)簡單的加一天減一個小時這樣的操作都要經過很多的代碼從能實現(xiàn),這里只是一帶而過,在其他的文章里會重新提到。
獲取當前時間的代碼為:
- NSDate *today = [NSDate date];
這里不得不發(fā)一些牢騷,很多人都說Objective-C是多么多么優(yōu)美的語言,但個人感覺有不少地方實在談不上優(yōu)美,就比如這個NSDate,功能是蠻強大的,但使用起來真的很不方便,對于新手而言完全是無從下手。這且不說,獲取當前時間居然用的不是today而date,如果沒了解過,誰會想到date=today?
nil
Objective-C里面空指針對象是nil,而不是null。
id
Objective-C支持動態(tài)類型,也就是在寫代碼的時候不確定是聲明類型,在程序運行的時候從能判斷。動態(tài)類型的變量用id來聲明,比如:
id tem = 1;//注意是id,而不是id *,除非你真的真的是想聲明一個這樣的指針
- tem = @"abc";
- tem = [[myClass alloc]init];
- @selector
selector是個非常特殊的類型,有點類似與函數(shù)指針,可以把一個函數(shù)當作參數(shù)來傳遞。這個需要專門討論
小結:關于Objective-C最基礎語法和基礎類型的內容介紹完了,希望本文對你會有所幫助,更多關于Objective-C的更多內容請參考編輯推薦。