NSCache和NSMutableDictionary的相同点与区别

NSCache和NSMutableDictionary的相同点与区别

相同点:
NSCache和NSMutableDictionary功能用法基本是相同的
区别:
NSCache是线程安全的,NSMutableDictionary线程不安全,Mutable开发的类一般都是线程不安全的
当内存不足时NSCache会自动释放内存(所以从缓存中取数据的时候总要判断是否为空)
NSCache可以指定缓存的限额,当缓存超出限额自动释放内存
NSCache的Key只是对对象进行了Strong引用,而非拷贝,所以不需要实现NSCopying协议

atomic的实现机制;为什么不能保证绝对的线程安全(最好可以结合场景来说)

atomic会对属性的setter/getter方法进行加锁,这仅仅只能保证在操作setter/getter方法是安全的。不能保证其他线程的安全
例如:线程1调用了某一属性的setter方法并进行到了一半,线程2调用其getter方法,那么会执行完setter操作后,再执行getter操作,线程2会获取到线程1setter后的完整的值;当几个线程同时调用同一属性的setter、getter方法时,会获取到一个完整的值,但获取到的值不可控

你可能感兴趣的:(NSCache和NSMutableDictionary的相同点与区别)