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

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

原子屬性和非原子屬性有什么區(qū)別?

原子屬性和非原子屬性有什么區(qū)別?

iOS
冉冉說 2019-05-31 16:43:07
原子屬性和非原子屬性有什么區(qū)別?做什么atomic和nonatomic財產(chǎn)申報中的意思?@property(nonatomic, retain) UITextField *userName;@property(atomic, retain) UITextField *userName;@property(retain) UITextField *userName;這三者在運(yùn)作上有何分別?
查看完整描述

3 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊

這在蘋果的文獻(xiàn)資料下面是一些實際發(fā)生的事情的例子。請注意,沒有“原子”關(guān)鍵字,如果不指定“非原子”,則屬性是原子的,但是顯式地指定“原子”將導(dǎo)致錯誤。

//@property(nonatomic, retain) UITextField *userName;//Generates roughly- (UITextField *) userName {
    return userName;}- (void) setUserName:(UITextField *)userName_ {
    [userName_ retain];
    [userName release];
    userName = userName_;}

現(xiàn)在,原子變體稍微復(fù)雜一點:

//@property(retain) UITextField *userName;//Generates roughly- (UITextField *) userName {
    UITextField *retval = nil;
    @synchronized(self) {
        retval = [[userName retain] autorelease];
    }
    return retval;}- (void) setUserName:(UITextField *)userName_ {
    @synchronized(self) {
      [userName_ retain];
      [userName release];
      userName = userName_;
    }}

基本上,為了確保線程安全,原子版本必須使用鎖,還需要將ref計數(shù)加在對象上(以及自動釋放計數(shù)以平衡對象),以便保證調(diào)用方存在對象,否則,如果另一個線程正在設(shè)置該值,則會出現(xiàn)一個潛在的爭用條件,從而導(dǎo)致ref計數(shù)下降到0。

實際上,根據(jù)屬性是標(biāo)量值還是對象,以及保留、復(fù)制、只讀、非原子等交互作用,這些東西的工作方式有很多不同的變體。一般來說,屬性合成器只知道如何為所有組合做“正確的事情”。


查看完整回答
反對 回復(fù) 2019-05-31
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊

原子

  • 是默認(rèn)行為。
  • 將確保當(dāng)前進(jìn)程在另一個進(jìn)程訪問變量之前由cpu完成。
  • 不是快速的,因為它確保了整個過程的完成。

非原子

  • 不是默認(rèn)行為。
  • 更快(用于合成代碼,也就是使用@Property和@合成創(chuàng)建的變量)
  • 非線程安全
  • 當(dāng)兩個不同的進(jìn)程同時訪問同一個變量時,可能會導(dǎo)致意外行為。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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