was mutated while being enumerated.-terminate called throwing&nbsp

來源:互聯網
上載者:User
遇到一個問題,跟蹤了半天才發現原因。
崩潰時提示:Collection <UIButtonContent: 0x2341234> was mutated while being enumerated
(在網上搜了一下,發現有一個類似的問題:'NSGenericException', reason: '*** Collection <__NSArrayM: 0x8ef350> was mutated while being enumerated.')

根據這個提示, 想了一下,覺得應該在做遍曆的過程中,修改了這個NSArray或者是NSMutableArray。後來想想, 這可能是多線程並發訪問時出現的問題, 沿崩潰時的堆棧找了一下,果然找到。


因為我們在下載時, 使用了Block每當接受到資料,就去更新一下一個UIScrollView中的下載進度條的百分比。

而另有一個NSTimer, 會隔一段時間把這個UIScrollView中的全部元素清空,然後再重新添加, 因為可能有動態元素需要添加或者刪除。

運行時, 就會出現,兩個線程同時去訪問的情況, 當Block正在去更新UIScrollView中的這個元素時, NSTimer中可能正在執行清除操作,所以就崩了。

原來,在同一時間,不同的線程同時讀取和修改了NSMutaleArray。

解決辦法:避免多線程同時去修改一個對象, 避免做遍曆時,這個對象被修改,根據這個思想,可以考慮加鎖,或者直接使用atomic的方式來做。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.