Преглед изворни кода

RA Image
上传队列加线程锁,解决线程安全性问题。

Ray Zhang пре 9 година
родитељ
комит
4bbc6875a1

BIN
Ants Contract/AntsContract.xcworkspace/xcuserdata/Ray.xcuserdatad/UserInterfaceState.xcuserstate


BIN
RA Image/RA Image.xcodeproj/project.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate


+ 1 - 1
common/upload/RAUploadManager.h

@@ -32,7 +32,7 @@
 @property (assign) bool removeError;
 @property (assign) bool autoStart;
 
-@property (strong,nonatomic) NSLock* arr_queue_lock;
+//@property (strong,nonatomic) NSLock* arr_queue_lock;
 
 @property (strong,nonatomic) NSOperationQueue* operation_queue;
 

+ 33 - 15
common/upload/RAUploadManager.m

@@ -38,7 +38,12 @@
         
         self.operation_queue = [NSOperationQueue new];
         self.operation_queue.maxConcurrentOperationCount = self.maxThread;
-        self.arr_queue_lock = [NSLock new];
+//        self.arr_queue_lock = [NSLock new];
+        
+//        [self.arr_queue_lock lock];
+//        [self.arr_queue_lock lock];
+//        [self.arr_queue_lock unlock];
+//        [self.arr_queue_lock unlock];
         
          [self loadTasks];
 //        self.backgroundColor = [UIColor clearColor];
@@ -73,11 +78,13 @@
     
 //    [self.arr_queue addObject:task];
    
-    [self.arr_queue_lock lock];
-    [[self mutableArrayValueForKey:@"arr_queue"] addObject:task];
-    [self.arr_queue_lock unlock];
-    
+//    [self.arr_queue_lock lock];
+//    [[self mutableArrayValueForKey:@"arr_queue"] addObject:task];
+//    [self.arr_queue_lock unlock];
     
+    @synchronized(self) {
+        [[self mutableArrayValueForKey:@"arr_queue"] addObject:task];
+    }
     
     if(self.newtaskStatus==TaskStatusWait)
     {
@@ -90,11 +97,13 @@
 }
 -(void) addTasks:(NSMutableArray*) tasks
 {
-    [self.arr_queue_lock lock];
-    [[self mutableArrayValueForKey:@"arr_queue"] addObjectsFromArray:tasks];
-    [self.arr_queue_lock unlock];
-    
+//    [self.arr_queue_lock lock];
+//    [[self mutableArrayValueForKey:@"arr_queue"] addObjectsFromArray:tasks];
+//    [self.arr_queue_lock unlock];
     
+    @synchronized(self) {
+        [[self mutableArrayValueForKey:@"arr_queue"] addObjectsFromArray:tasks];
+    }
     
     if(self.newtaskStatus==TaskStatusWait)
     {
@@ -120,9 +129,13 @@
     
     
     
-    [self.arr_queue_lock lock];
-    [[self mutableArrayValueForKey:@"arr_queue"] removeObjectsInArray:tasks];
-    [self.arr_queue_lock unlock];
+//    [self.arr_queue_lock lock];
+//    [[self mutableArrayValueForKey:@"arr_queue"] removeObjectsInArray:tasks];
+//    [self.arr_queue_lock unlock];
+    
+    @synchronized(self) {
+        [[self mutableArrayValueForKey:@"arr_queue"] removeObjectsInArray:tasks];
+    }
     
 //    if (self.delegate && [self.delegate respondsToSelector:@selector(uploadManager:didRemoveTasks:)]) {
 //        [self.delegate uploadManager:self didRemoveTasks:tasks];
@@ -138,9 +151,14 @@
     [fmanager removeItemAtPath:[self filePath:task] error:&error];
     
     
-    [self.arr_queue_lock lock];
-    [[self mutableArrayValueForKey:@"arr_queue"] removeObject:task];
-    [self.arr_queue_lock unlock];
+//    [self.arr_queue_lock lock];
+//    [[self mutableArrayValueForKey:@"arr_queue"] removeObject:task];
+//    [self.arr_queue_lock unlock];
+    
+    
+    @synchronized(self) {
+        [[self mutableArrayValueForKey:@"arr_queue"] removeObject:task];
+    }
 
 //    if (self.delegate && [self.delegate respondsToSelector:@selector(uploadManager:didRemoveTasks:)]) {
 //        [self.delegate uploadManager:self didRemoveTasks:@[task]];