ios中的字面量語法

oc的語法很繁雜,在定義一些數組、字典的時候要寫很長的方法。通過字面量語法可以像c語言那樣定義數組等,可以縮減代碼長度。

在xcode4.5,ios6以上版本已經全面支持以下的字面量。

我們常用的字面量

NSString* str = @"Hello World";  

NSNumber

NSNumber支持的所有類型都可以用字面量語法

    NSNumber *someNumber = [NSNumber numberWithInt:1];
    someNumber = [NSNumber numberWithFloat:1.5f];
    someNumber = [NSNumber numberWithChar:'A'];
    someNumber = [NSNumber numberWithBool:YES];
    
    NSNumber* someNumber1;
    someNumber1 = @1;
    someNumber1 = @1.5f;
    someNumber1 = @'A';
    someNumber1 = @YES;

字面量語法還適用于下列的表達式

    int x = 4;
    float y = 5.33f;
    NSNumber *someNumber2 = @(x * y);

字面量數組

    NSArray* week = [NSArray arrayWithObjects:@"Monday",@"Tuesday",@"Wednesday",@"Thursday",@"Friday",nil];
    NSString* Wed = [week objectAtIndex:2];
    
    NSArray* week1 = @[@"Monday",@"Tuesday",@"Wednesday",@"Thursday",@"Friday"];
    NSString* Wed1 = week1[2];

不過,用字面量語法創建數組時要注意,若數組元素對象中有nil,則會拋出異常

*** Terminating app due to uncaught exception'NSInvalidArgumentException', 

reason: '***-[__NSPlaceholderArray initWithObjects:count:]: attempt toinsert nil object from objects[0]' 

在改用字面量語法來創建數組時就會遇到這個問題。下面這段代碼分別以兩種語法創建

數組:
id object1 = @"1234"; 
id object2 =nil; 
id object3 =@"4567";

NSArray *arrayA = [NSArray array WithObjects:object1, object2, object3, nil];
NSArray *arrayB = @[object1, object2, object3];

大家想想:如果 object1 與 object3 都指向了有效的 Objective-C 對象,而 object2 是 nil, 那么會出現什么情況呢?按字面量語法創建數組 arrayB 時會拋出異常。arrayA 雖然能創建出 來,但是其中卻只含有 object1 一個對象。原因在于,“ arrayWithObjects:”方法會依次處理 各個參數,直到發現 nil 為止,由于 object2 是 nil,所以該方法會提前結束。
這個微妙的差別表明,使用字面量語法更為安全。拋出異常令應用程序終止執行,這比 創建好數組之后才發現元素個數少了要好。向數組中插入 nil 通常說明程序有錯,而通過異 常可以更快地發現這個錯誤。

字面量字典

    NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Song",@"name",
                         @"28",@"age",
                         @"12345678",@"tel", nil];
    NSString *name = [dic objectForKey:@"name"];
    
    
    NSDictionary* dic1 = @{@"name":@"Song",
                           @"age":@"28",
                           @"tel":@"12345678"};
    NSString *name1 = dic1[@"name"];

使用字面量字典與字面量數組一樣,如果元素中有nil值,則會拋出異常。

局限性:字面量語法有個小小的限制,就是除了字符串以外,所創建出來的對象必須屬于Foundation框架才行。如果自定義了這些類的子類,則無法用字面量語法創建其對象。要想創建自定義子類的實例,必須采用“非字面量語法”

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

    NSMutableArray *mutableArray = [@[@1, @2, @3, @4, @5]mutableCopy];
    mutableArray[3] = @33;
    
    NSMutableDictionary* mutableDic = [@{@"name":@"song",
                                 @"age":@"28",
                                  @"tel":@"1234567"}mutableCopy];
    mutableDic[@"age"]=@"30";

要點

應該使用字面量語法來創建字符串、數值、數組、字典。與創建此類對象的常規方法相比,這么做更加簡明扼要。

應該通過取下標操作來訪問數組下標或字典中的鍵所對應的元素。

用字面量語法創建數組或字典時,若值中有nil,則會拋出異常。因此,務必確保值里不含nil

以上均參考和摘抄自《編寫高質量iOS與OS X代碼的52個有效方法》大家感興趣可以購買這本書看一下。
參考博客

我創建了一個QQ群,希望大家能本著互聯網開放的心態,將遇到的問題和經驗在群里分享,大家互相交流心得,共同提高。
群號:77311380

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容