第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Objective-C中鎖定/解鎖@synchronized?

如何在Objective-C中鎖定/解鎖@synchronized?

湖上湖 2019-09-18 14:51:05
@synchronized不使用“鎖定”和“解鎖”來實現(xiàn)互斥嗎?那怎么做鎖定/解鎖呢?以下程序的輸出僅為“Hello World”。@interface MyLock: NSLock<NSLocking>@end@implementation MyLock- (id)init {    return [super init];}- (void)lock {    NSLog(@"before lock");    [super lock];    NSLog(@"after lock");}- (void)unlock {    NSLog(@"before unlock");    [super unlock];    NSLog(@"after unlock");}@endint main (int argc, const char * argv[]) {    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];    MyLock *lock = [[MyLock new] autorelease];    @synchronized(lock) {        NSLog(@"Hello World");    }    [pool drain];}
查看完整描述

3 回答

?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

在Objective-C中,@synchronized塊自動為您處理鎖定和解鎖(以及可能的異常)。運行時動態(tài)地生成一個NSRecursiveLock,它與您正在同步的對象相關(guān)聯(lián)。Apple文檔更詳細(xì)地解釋了它。這就是為什么你沒有看到NSLock子類的日志消息 - 你同步的對象可以是任何東西,而不僅僅是一個NSLock。


基本上,@synchronized (...)是一種簡化代碼的便捷結(jié)構(gòu)。像大多數(shù)簡化的抽象一樣,它具有相關(guān)的開銷(將其視為隱藏成本),并且很好地意識到這一點,但是無論如何使用這樣的構(gòu)造時,原始性能可能不是最高目標(biāo)。


查看完整回答
反對 回復(fù) 2019-09-18
?
長風(fēng)秋雁

TA貢獻1757條經(jīng)驗 獲得超7個贊

其實


{

  @synchronized(self) {

    return [[myString retain] autorelease];

  }

}

直接轉(zhuǎn)換為:


// needs #import <objc/objc-sync.h>

{

  objc_sync_enter(self)

    id retVal = [[myString retain] autorelease];

  objc_sync_exit(self);

  return retVal;

}

此API自iOS 2.0起可用并使用...


#import <objc/objc-sync.h>


查看完整回答
反對 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 721 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號