標籤:

第三條:多用字面量語法,少用與之等價的方法

第三條:多用字面量語法,少用與之等價的方法

編寫Objective-C程序時,總會用到某幾個類,它們屬於Foundation

框架。雖然從技術上來說,不用Foundation框架也能寫出Objective-C代碼,但實際上卻經常要用到此框架。這幾個類是NSString、NSNumber、NSArray、NSDictionary。從類名上即可看出各自所表示的數據結構。

有一種非常簡單的方式能創建NSString對象,這就是""字元串字面量(string literal)",其語法如下:

NSString *someString = @"Effective Objective-C 2.0";

字面數值

有時需要把整數、浮點數、布爾值封入Objective-C對象中。這種情況謝可以使用NSNumber類,該類可處理多種類型的數值。如不使用字面量,需要按下面方式創建實例:

NSNumber *someNumber = [NSNumber numberWithInt:3];

下面是使用字面量

NSNumber *intNumber = @1;NSNumber *floatNumber = @2.24;NSNumber *doubleNumber = @3.1415926;NSNumber *boolNumber = @YES;NSNumber *charNumber = @a;

字面量數組

數組是常用的數據結構,如果不使用字面量語法,那麼就要這樣來創建數組:

NSArray *animalss = [NSArray arrayWithObjects:@"cat",@"dog",@"mouse",@"sheep", nil];//字面量語法NSArray *animals = @[@"cat",@"dog",@"mouse",@"sheep"];

從數組中取出某個下標所對應的對象

NSString *dog = [animalss objectAtIndex:1]; //字面量語法NSString *dog1 = animals[1];

字面量字典

"字典"(Dictionary)是一種映射型數據結構,可向其中添加鍵值對。與數組一樣,Objective-C代碼也經常用到字典。其創建方式有下面:

NSDictionary *personDic = [NSDictionary dictionaryWithObjectsAndKeys:@"Matt",@"firstName",@"Gall",@"lastName",[NSNumber numberWithInt:28],@"age", nil];//字面量語法NSDictionary *personDic1 = @{@"firstName":@"Matt", @"lastName":@"Gall", @"age":@28 };

字典也可以像數組那樣用字面量語法訪問。按照特定鍵訪問其值的傳統做法是:

NSString *lastName = [personDic objectForKey:@"lastName"]; //字面量語法NSString *lastName = personDic1[@"lastName"];

可變數組與字典

通過取下標操作,可以訪問數組中某個下標或字典中某個鍵所對應的元素,如果數組與字典對象是可變的,那麼也能通過下標修改其中的元素值,修改可變數組與字典內用的做法是:

[mutableArray replaceObjectAtIndex:0 withObject:@"dog"];[mutableDictionary setValue:@"Tom" forKey:@"lastName"];//字面量語法mutableArray[0] = @"dog";mutableDictionary[@"lastName"] = @"Tom";

局限性

字面量語法有個小小的限制,就是除了字元串以外,所創建出來的對象必須屬於Foundation框架才行,如果自定義了這些類的子類,則無法用字面量語法創建其對象。

使用字面量語法創建出來的字元串、數組、字典對象都是不可變的(immutable)。若想要可變版本的對象,則需要複製一份:

NSMutableArray *mutable = [@[@1,@2,@3,@4] mutableCopy];

這麼做會多調用一個方法,而且還要再創建一個對象,不過使用字面量語法所帶來的好吃還是多於上述缺點的。

要點

  • 應該使用字面量語法來創建字元串、數值、數組、字典。與創建此類對象的常規方法相比,這麼做更加簡明扼要。
  • 應該通過取下標操作來訪問數組或字典中的鍵所對應的元素。
  • 用字面量語法創建數組或字典時,若值中有nil,則會拋出異常。因此,務必確保值里不含nil。

推薦閱讀:

iOS十幾個輸入框怎麼布局?
iOS 7 Beta 1 目前存在哪些問題?
iOS 推送全解析,你不可不知的所有 Tips!
開源!iOS 應用安全分析工具 Passionfruit
教你如何100%還原設計稿

TAG:iOS |