1. 程式人生 > >3、多用字面量語法,少用與之等價的方法

3、多用字面量語法,少用與之等價的方法

keys obj ble alloc ive 3.1 per 無法 bsp

1、字面字符串 摒棄: NSString *someString = [[NSString alloc] initWithString: @"Effective Objective-C 2.0"]; 提倡: NSString *someString = @"Effective Objective-C 2.0"; 2、字面數值 摒棄: NSNumber *someNumber = [NSNumber numberWithInt: 1]; 提倡: NSNumber *intNumber = @1; NSNumber *floatNumber = @2.5f; NSNumber *doubleNumber = @3.14159; NSNumber *boolNumber = @YES; NSNumber *charNumber = @‘a’; 亦可以 int x = 5; float y = 6.32f; NSNumber *expressionNumber = @(x * y); 3、字面量數組
摒棄: NSArray *animals = [NSArray arrayWithObjects: @“cat”, @“dog”, @“mouse”, @“badger”, nil]; NSString *dog = [animals objectAtIndex: 1]; 提倡: NSArray *animals = @[@“cat”, @“dog”, @“mouse”, @“badger”]; NSString *dog = animals[1]; 提示: “arrayWithObjects:”方法會依次處理各個參數,直到發現nil為止。而字面量語法創建時如果有nil,則會拋出異常。這個微妙的差別表明,使用字面量語法更為安全。拋出異常令應用程序終止執行,這比創建好數組之後才發現元素個數少了要好。 4、字面量字典
摒棄: NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys: @“Matt”, @“firstName”, @“Galloway”, @“lastName”, [NSNumber numberWithInt: 28], @“age”, nil]; NSString *lastName = [personData objectForKey: @“lastName"]; 提倡: NSDictionary *personData = @[email protected] : @“Matt”, @“lastName” : @“Galloway”, @“age” : @28}: NSString *lastName = personData[@“lastName"]; 提示: 跟字面量數組類似。 5、可變數組與字典
摒棄: [animals replaceObjectAtIndex: 1 withObject: @“dog”]; [personData setObject: @“Jon” forKey: @“lastName”]; 推薦: animals[1] = @“dog"; personData[@“lastName”] = @“Jon”; 6、局限性 字面量語法有個小小的限制,就是除字符串之外,所創建出來的對象必須屬於Foundation框架才行。如果自定義了這些類的子類,則無法用字面量語法創建其對象。要創建自定義子類的實例,必須采用“非字面量語法”。然而,由於NSArray、NSDictionary、NSNumber都是業已定型的“子類”,因此很少有人會從其中自定義子類,真要這樣做也比較麻煩。而且一般來說,標準的實現已經很好了,無須再改動。 創建字符串時可以使用自定義的子類,然而必須要修改編譯器的選項才行。除非你明白這樣做的後果,否則不鼓勵使用此選項,用NSString就足夠了。 使用字面量語法創建出來的字符串、數組、字典對象都是不可變的。若想要可變版本的對象,則需要復制一份mutableCopy。這麽做會多調一個方法,而且還要再創建一個對象,不過使用字面量語法所帶來的好處還是多於上述缺點的。

3、多用字面量語法,少用與之等價的方法