iOS開發 字面語法之陣列注意事項

2021-08-10 04:14:20 字數 952 閱讀 4067

//請看題,下面的寫法用字面量語法來寫,並且是可變陣列

nsstring *str1 = @"hello";

nsstring *str2;

nsstring *str3 = @"world!";

nsarray *array0 = [nsarray arraywithobjects:str1,str2,str3, nil];

大家怎麼來寫?是不是這樣?

nsmutablearray *arraymutable =[@[str1,str2,str3]mutablecopy];

然後你會發現程式崩潰了:

2017-11-01 19:05:23.771334+0800 11[15655:3673082] *** 

'nsinvalidargumentexception', reason: '*** -

[__nsplaceholderarray initwithobjects:count:]:attempt to

insert nil object from objects[1]'

nsarray *array0 = [nsarray arraywithobjects:str1,str2,str3, nil];

中卻沒有崩潰,但是卻有乙個問題,陣列以nil結束,所以在str2時陣列預設結束,陣列中只有乙個str1;

用字面量語法寫的時候,因為字面量語法時,若其中一項為nil,則會丟擲異常,結束程式,這也是字面量語法更為安全的原因,比建立好陣列才發現元素少了要好。

因為字面量語法寫出來的數字字典都是不可變的,所以為了讓其可變,需要對其進行mutablecopy,這也是字面量語法的侷限性,總的來說,有點要大於缺點,因為字面量語法不需要來初始化,也不需要繁瑣的語法來新增內容,更加簡潔。

iOS開發之拆分陣列

記錄下,以備後用。主要說下關於陣列按照固定長度拆分成不同陣列的問題 思路 首先是將你需要拆分的陣列用count計算大小,然後用總得大小除以指定長度求餘即 得出陣列拆分出的總個數,利用總個數for迴圈,在迴圈裡在進行迴圈拆分陣列,得到的子陣列再加入陣列並返回這個陣列。主要 如下 pragma mark...

iOS開發 陣列的深拷貝淺拷貝注意點

今天寫 過程中遇到乙個頭疼的問題 可變陣列經過深拷貝之後,變動新陣列裡面的元素,原來的陣列也會跟著變。做了一下實驗,得到如下結論 當陣列元素是自定義類的時候,不管深淺拷貝,陣列裡面的元素位址是不變的。dpntextcontent content1 dpntextcontent alloc init ...

iOS開發之OC語法基礎(七) 集合

collection 集合 能容納多個事物的容器就是集合 在ios中的集合容器有陣列 字典 集合 1 陣列 nsarray,不可變陣列,可以存放多個物件,例項化的時候以nil表示結束,通過下標索引物件 nsarray無法新增 刪除 修改元素 import int main int argc,cons...