第三條:多用字面量語法,少用與之等價的方法
第三條:多用字面量語法,少用與之等價的方法
編寫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 |