@interface SynchronizedArray()@property (retain,atomic) NSMutableArray *array;@end@implementation SynchronizedArray- (ID)init{ self = [super init]; if (self) { _array = [[NSMutableArray alloc] init]; } return self;}-(ID)objectAtIndex:(NSUInteger)index{ @synchronized(_array) { return [_array objectAtIndex:index]; }}-(voID)removeObject:(ID)object{ @synchronized(_array) { [_array removeObject:object]; }}-(voID)removeObjectAtIndex:(NSUInteger)index{ @synchronized(_array) { [_array removeObjectAtIndex:index]; }}-(voID)addobject:(ID)object{ @synchronized(_array) { [_array addobject:object]; }}- (NSUInteger)count{ @synchronized(_array) { return [_array count]; }}-(voID)removeAllObjects{ @synchronized(_array) { [_array removeAllObjects]; }}-(ID)copy{ @synchronized(_array) { return [_array copy]; }}
我使用这个类而不是旧的可变数组,但应用程序仍然在此行崩溃:return [_array objectAtIndex:index];我也试过这种方法与NSLock,但没有运气.我做错了什么以及如何解决这个问题?
解决方法 我相信这个解决方案很差.考虑一下:>线程#1调用count,并告知阵列中有4个对象.
>数组未同步.
>线程#2在数组上调用removeObjectAtIndex:2.
>数组未同步.
> thread#1调用objectAtIndex:3并发生错误.
相反,您需要一个更高级别的锁定机制,其中锁定在步骤1和5的数组周围,而线程#2无法在这些步骤之间移除对象.
总结以上是内存溢出为你收集整理的ios – NSMutableArray线程安全全部内容,希望文章能够帮你解决ios – NSMutableArray线程安全所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)