参考文章:
关于数组线程安全问题
ios多线程同时访问数组问题
Cocoa中的线程安全类
参考上面的文章,基本上有2种方法来保证数组的线程安全。
1、在使用数组的地方都进行copy操作。未经过验证。
NSArray *arr = [NSArray arrayWithArray:A];
2、封装一个Bean来把线程安全的相关代码进行封装。
这里又可以分成两种方案
1)通过继承NSMutableArray 来实现
优点:
1、只要实现其primitive method,有些方法可以省略。
2、可以使用[]来访问元素
缺点:NSMutableArray 继承时必须要实现其primitive method,如果未实现,则会造成程序崩溃。但是由于继承的关系,即使未实现其primative method,在使用时编译器仍然会提示。如果不知道NSMutableArray的这一属性,很容易造成崩溃。
2)通过一个继承于NSObject 的类,把NSMutableArray 做为此类的一个属性,所有的操作都针对此NSMutableArray来进行,并进行线程保护。
优点:
1、因为NSMutableArray 继承时必须要实现其primative method,如果未实现,则会造成程序崩溃。但是由于继承的关系,即使未实现其primative method,在使用时编译器仍然会提示。如果不知道NSMutableArray的这一属性,很容易造成崩溃。
缺点:
1、不能使用下标来访问元素
结论:我觉得最好的方法还是使用继承于NSObject的类,虽然访问元素的方法麻烦一点,但是更安全,可控性更高,不容易出现问题。
网友评论