我们都知道,NSMutableDictionary是线程不安全的。
NSMutableDictionary线程不安全会崩溃,之前认为不安全原因主要是因为一个对象去设置一个值,另外一个线程同时去设置,可能会导致值对象内存重复释放。
按着这个思路,今天在一个多线程不会同时去设置同一个key时,发现一样也会崩溃。比较纳闷。
网上搜了一下,有提到线程不安全确认不仅和内存重复释放这方面有关,还有可能访问到垃圾内存,但没说具体原因。
细想一下,会不会是字典扩容呢。
对,如果是字典扩容的时候,多线程访问很有可能访问到垃圾内存。
然后做了个测试,初始化不同的capacity,发现50个线程设置了100个capacity的时候,确实没有再出现崩溃了。
知道了崩溃的原因,其实像有些情况如果知道大概NSMutableDictionary用的情景,如果追求高效率,设置一个合适的capacity,也未尝不可以在多线程中不使用锁直接使用哈