一、執行下面**會發生什麼?什麼解決?
nsmutablearray *array = [nsmutablearray arraywithobjects: @"122", @"333", @"444", nil];
for (nsstring *string in array)
答:會崩潰,提示nsgenericexception異常。出現下面的報錯資訊
意思是在列舉時,集合資料被修改了。
原因:因為for…in…利用了快速列舉nsfastenumerate,其在內部是用iterator(迭代器)實現遍歷的,一旦元素變動,之前的元素全部被失效,所以在for each的迴圈當中,最好不要去進行元素的修改動作,若需要修改,迴圈改為for遍歷,由於內部機制不同,不會產生修改後結果失效的問題。
1、使用普通for迴圈
nsmutablearray *array = [nsmutablearray arraywithobjects: @"122", @"333", @"444", nil];
for (int i = 0; i < array.count; i++)
2、使用copy乙個不可變陣列進行刪除
nsmutablearray *array = [nsmutablearray arraywithobjects: @"122", @"333", @"444", nil];
nsarray *copyarray = [array copy];
for (nsstring *string in copyarray)
3、使用enumerateobjectsusingblock(列舉器)來遍歷
nsmutablearray *array = [nsmutablearray arraywithobjects: @"122", @"333", @"444", nil];
[array enumerateobjectsusingblock:^(id obj, nsuinteger idx, bool * stop) ];
nsfastenumeration (快速列舉)
objective-c fast enumeration 實現原理
nsenumerator && nsfastenumerate
iOS可變陣列刪除某些元素
專案中有個需求,數量為0的卡不能傳給伺服器,不然開發票會有很多空卡 當時同事犯的錯誤是 直接在model.cardarray 這個可變陣列裡面進行迴圈,一邊迴圈,一邊匹配到裡面model數量為0的元素,進行刪除操作,反饋到這裡來的時候說原始陣列有8個元素,才迴圈了4次就結束了,導致裡面還有3個數量為...
C STL deque可變陣列
deque資料應該很多,這裡不多所了,直接一點上程式吧!include include include include 用於distance deque模板,deque迭代器 using namespace std stl deque 是乙個動態陣列,與vector類似 可在開頭與末尾插入 刪除資料...
結構可變陣列
開拓空間 array array create int init size 該段 用malloc來為結構體裡面的陣列指標分配乙個我們需要的空間,然後把位址分配給結構體裡面的array 為array結構體分配乙個空間並返回乙個array型別 用於主函式裡面array結構體型別直接複製 恢復空間,清空記...