iOS小技巧·利用宏封裝線程鎖的技巧

啟示

第三方庫中經常用到的這個小技巧,例如YYCache,SDWebImage等等,雖然各自封裝的具體形式不太一樣。

  • YYCache
YYCache
  • SDWebImage
SDWebImage
  • YYWebImage
YYWebImage

我們可以借鑒到自己的項目中弃理,在適當的位置通過宏來加鎖解鎖操作。

使用

  • 1.YYCache版本的宏封裝
#define Lock() dispatch_semaphore_wait(self->_lock, DISPATCH_TIME_FOREVER)
#define Unlock() dispatch_semaphore_signal(self->_lock)
  • 操作數據之前屎蜓,先外面進行加鎖解鎖
- (NSInteger)totalCount {
    Lock();
    int count = [_kv getItemsCount];
    Unlock();
    return count;
}
  • 鎖里面再進行真正的數據操作
- (int)getItemsCount {
    return [self _dbGetTotalItemCount];
}

2.SDWebImage版本的宏封裝

  • 定義
#define LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
#define UNLOCK(lock) dispatch_semaphore_signal(lock);
  • 調用示例
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(nullable NSString *)field {
    LOCK(self.headersLock);
    if (value) {
        self.HTTPHeaders[field] = value;
    } else {
        [self.HTTPHeaders removeObjectForKey:field];
    }
    UNLOCK(self.headersLock);
}

其中痘昌,self.headersLock 的定義為:

@property (strong, nonatomic, nonnull) dispatch_semaphore_t headersLock; 

3. YYWebImage版本的宏封裝

相對于上面,還有更方便的宏封裝炬转,把解鎖操作跟加鎖封裝在一塊辆苔。

  • 宏定義
#define LOCK(...) dispatch_semaphore_wait(self->_lock, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \
dispatch_semaphore_signal(self->_lock);

#define LOCK_VIEW(...) dispatch_semaphore_wait(view->_lock, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \
dispatch_semaphore_signal(view->_lock);
  • 使用示例
- (void)didReceiveMemoryWarning:(NSNotification *)notification {
    [_requestQueue cancelAllOperations];
    [_requestQueue addOperationWithBlock: ^{
        _incrBufferCount = -60 - (int)(arc4random() % 120); // about 1~3 seconds to grow back..
        NSNumber *next = @((_curIndex + 1) % _totalFrameCount);
        LOCK(
             NSArray * keys = _buffer.allKeys;
             for (NSNumber * key in keys) {
                 if (![key isEqualToNumber:next]) { // keep the next frame for smoothly animation
                     [_buffer removeObjectForKey:key];
                 }
             }
        )//LOCK
    }];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扼劈,隨后出現(xiàn)的幾起案子驻啤,更是在濱河造成了極大的恐慌,老刑警劉巖荐吵,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骑冗,死亡現(xiàn)場離奇詭異,居然都是意外死亡先煎,警方通過查閱死者的電腦和手機贼涩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榨婆,“玉大人磁携,你說我怎么就攤上這事×挤纾” “怎么了谊迄?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烟央。 經常有香客問我统诺,道長,這世上最難降的妖魔是什么疑俭? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任粮呢,我火速辦了婚禮,結果婚禮上钞艇,老公的妹妹穿的比我還像新娘啄寡。我一直安慰自己,他們只是感情好哩照,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布挺物。 她就那樣靜靜地躺著,像睡著了一般飘弧。 火紅的嫁衣襯著肌膚如雪识藤。 梳的紋絲不亂的頭發(fā)上砚著,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音痴昧,去河邊找鬼稽穆。 笑死,一個胖子當著我的面吹牛赶撰,可吹牛的內容都是我干的舌镶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼扣囊,長吁一口氣:“原來是場噩夢啊……” “哼乎折!你這毒婦竟也來了?” 一聲冷哼從身側響起侵歇,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吓蘑,沒想到半個月后惕虑,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡磨镶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年溃蔫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琳猫。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡伟叛,死狀恐怖,靈堂內的尸體忽然破棺而出脐嫂,到底是詐尸還是另有隱情统刮,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布账千,位于F島的核電站侥蒙,受9級特大地震影響,放射性物質發(fā)生泄漏匀奏。R本人自食惡果不足惜鞭衩,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娃善。 院中可真熱鬧论衍,春花似錦、人聲如沸聚磺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咧最。三九已至捂人,卻和暖如春御雕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滥搭。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工酸纲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瑟匆。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓闽坡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愁溜。 傳聞我的和親對象是個殘疾皇子疾嗅,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明先生_x閱讀 15,968評論 3 119
  • SQLite3性能調整主要通過pragma指令來實現(xiàn)冕象。例如:空間釋放代承、磁盤同步、Cache大小等渐扮。 一.空間釋放1...
    周曉風閱讀 6,141評論 0 1
  • 試想一下,當你和你的男(女)神去一間優(yōu)雅的西餐廳耻讽,然后察纯,你們開始點餐了,“服務員针肥,來一份牛排饼记。”祖驱;“好的握恳,請問要幾...
    劉若安丶閱讀 1,471評論 0 0
  • 他依舊汲著鞋子路過夜場 城市慷慨亮足整夜月光 月光東流進東流的江 江邊老樹上系著一張女兒家的愿望 風從芭蕉撞上他的...
    文帝風塵閱讀 408評論 0 1
  • 在一片澄澈的夜幕下,明月如同解開面紗的仙子捺僻,絕世容顏無遮無攔乡洼,滿身光華傾世奪目。 靜謐的夜在這冷月如霜下匕坯,微微涼束昵。...
    韻書云卷閱讀 309評論 0 4