<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS 多線程安全 與可變數(shù)組

      完全來自于 iOS 多線程安全與可變字典 的學(xué)習(xí)

      基本相同,舉一反三

      直接上樣例代碼

      是我參照網(wǎng)上,根據(jù)當(dāng)前業(yè)務(wù)需求改的。

      其實好多人在這里喜歡用類別處理。我個人覺得用類別 極其容易和普通方法混淆,所以為了降低耦合度,增強(qiáng)代碼理解性和可讀性。這里單獨(dú)創(chuàng)建類挺好的。用時候使用這個自定義的安全數(shù)組就好了。

      //  MensesTracker
      //
      //  Created by HF on 2018/6/7.
      //  Copyright ? 2018年 huofar. All rights reserved.
      //
      
      #import <Foundation/Foundation.h>
      
      @interface SyncMutableArray : NSObject
      
      //只讀
      - (NSMutableArray *)safeArray;
      
      //判斷是否包含對象
      - (BOOL)containsObject:(id)anObject;
      
      //集合元素數(shù)量
      - (NSUInteger)count;
      
      //獲取元素
      - (id)objectAtIndex:(NSUInteger)index;
      //枚舉元素
      - (NSEnumerator *)objectEnumerator;
      //插入
      - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
      //插入
      - (void)addObject:(id)anObject;
      //移除
      - (void)removeObjectAtIndex:(NSUInteger)index;
      //移除
      - (void)removeObject:(id)anObject;
      //移除
      - (void)removeLastObject;
      //替換
      - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
      //獲取索引
      - (NSUInteger)indexOfObject:(id)anObject;
      
      @end
      //
      //  SyncMutableArray.m
      //  MensesTracker
      //
      //  Created by HF on 2018/6/7.
      //  Copyright ? 2018年 huofar. All rights reserved.
      //
      
      #import "SyncMutableArray.h"
      
      @interface SyncMutableArray ()
      
      @property (nonatomic, strong) dispatch_queue_t syncQueue;
      @property (nonatomic, strong) NSMutableArray* array;
      
      @end
      
      @implementation SyncMutableArray
      
      #pragma mark - init 方法
      - (instancetype)initCommon
      {
          self = [super init];
          if (self) {
              //%p 以16進(jìn)制的形式輸出內(nèi)存地址,附加前綴0x
              NSString* uuid = [NSString stringWithFormat:@"com.huofar.array_%p", self];
              //注意:_syncQueue是并行隊列
              _syncQueue = dispatch_queue_create([uuid UTF8String], DISPATCH_QUEUE_CONCURRENT);
          }
          return self;
      }
      
      - (instancetype)init
      {
          self = [self initCommon];
          if (self) {
              _array = [NSMutableArray array];
          }
          return self;
      }
      
      //其他init方法略
      
      #pragma mark - 數(shù)據(jù)操作方法 (凡涉及更改數(shù)組中元素的操作,使用異步派發(fā)+柵欄塊;讀取數(shù)據(jù)使用 同步派發(fā)+并行隊列)
      
      - (NSMutableArray *)safeArray
      {
          __block NSMutableArray *safeArray;
          dispatch_sync(_syncQueue, ^{
              safeArray = _array;
          });
          return safeArray;
      }
      
      - (BOOL)containsObject:(id)anObject
      {
          __block BOOL isExist = NO;
          dispatch_sync(_syncQueue, ^{
              isExist = [_array containsObject:anObject];
          });
          return isExist;
      }
      
      - (NSUInteger)count
      {
          __block NSUInteger count;
          dispatch_sync(_syncQueue, ^{
              count = _array.count;
          });
          return count;
      }
      
      - (id)objectAtIndex:(NSUInteger)index
      {
          __block id obj;
          dispatch_sync(_syncQueue, ^{
              if (index < [_array count]) {
                  obj = _array[index];
              }
          });
          return obj;
      }
      
      - (NSEnumerator *)objectEnumerator
      {
          __block NSEnumerator *enu;
          dispatch_sync(_syncQueue, ^{
              enu = [_array objectEnumerator];
          });
          return enu;
      }
      
      - (void)insertObject:(id)anObject atIndex:(NSUInteger)index
      {
          dispatch_barrier_async(_syncQueue, ^{
              if (anObject && index < [_array count]) {
                  [_array insertObject:anObject atIndex:index];
              }
          });
      }
      
      - (void)addObject:(id)anObject
      {
          dispatch_barrier_async(_syncQueue, ^{
              if(anObject){
                  [_array addObject:anObject];
              }
          });
      }
      
      - (void)removeObjectAtIndex:(NSUInteger)index
      {
          dispatch_barrier_async(_syncQueue, ^{
              
              if (index < [_array count]) {
                  [_array removeObjectAtIndex:index];
              }
          });
      }
      
      - (void)removeObject:(id)anObject
      {
          dispatch_barrier_async(_syncQueue, ^{
              [_array removeObject:anObject];//外邊自己判斷合法性
          });
      }
      
      - (void)removeLastObject
      {
          dispatch_barrier_async(_syncQueue, ^{
              [_array removeLastObject];
          });
      }
      
      - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
      {
          dispatch_barrier_async(_syncQueue, ^{
              if (anObject && index < [_array count]) {
                  [_array replaceObjectAtIndex:index withObject:anObject];
              }
          });
      }
      
      - (NSUInteger)indexOfObject:(id)anObject
      {
          __block NSUInteger index = NSNotFound;
          dispatch_sync(_syncQueue, ^{
              for (int i = 0; i < [_array count]; i ++) {
                  if ([_array objectAtIndex:i] == anObject) {
                      index = i;
                      break;
                  }
              }
          });
          return index;
      }
      
      - (void)dealloc
      {
          if (_syncQueue) {
              _syncQueue = NULL;
          }
      }
      
      @end

       

      參考

      1. https://www.aliyun.com/jiaocheng/354967.html

      2.https://blog.csdn.net/zhang522802884/article/details/76728902

      posted on 2018-06-07 17:08  ACM_Someone like you  閱讀(3172)  評論(0)    收藏  舉報

      導(dǎo)航

      主站蜘蛛池模板: 亚洲AV国产福利精品在现观看| 四虎在线成人免费观看| 午夜无码免费福利视频网址| 国产一区在线观看不卡| 少妇性bbb搡bbb爽爽爽欧美| 一区二区三区精品偷拍| 少妇高潮毛片免费看| 久热这里只国产精品视频| 国产日韩综合av在线| 亚洲男人的天堂av手机在线观看| 日本中文一二区有码在线| 欧美变态另类zozo| 营口市| 国产日韩AV免费无码一区二区三区| 亚洲AV无码AV在线影院| 精品国产中文字幕懂色| 蜜臀av一区二区国产在线| 一二三三免费观看视频| 亚洲少妇人妻无码视频| 久久亚洲av成人一二三区| 国产精品一区二区日韩精品 | 成年在线观看免费人视频| 国产极品尤物粉嫩在线观看| 影视先锋av资源噜噜| 蜜桃av亚洲精品一区二区| 8x国产精品视频| 偷拍精品一区二区三区| 免费看视频的网站| 日本丰满少妇高潮呻吟| 香港特级三A毛片免费观看| 毛多水多高潮高清视频| 新闻| 国产精品中文字幕一区| 激情四射激情五月综合网| 亚洲综合精品一区二区三区| 97成人碰碰久久人人超级碰oo| 日韩免费视频一一二区| 中文字幕人妻精品在线| 亚洲成av人片无码不卡播放器| 日产精品99久久久久久| 亚洲色最新高清AV网站|