IOS 類的屬性修飾符atomic

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   ar   os   使用   java   

  1. 在聲明一個類的屬性時,預設這個屬性會被修飾atomic,意思是原子性訪問的。

nonatomic和atomic修飾的屬性,在自己沒有重寫setter和getter的時候才會發生作用,其主要的作用可以理解為,atomic修飾的setter和getter在多線程下面是互斥的,相當於setter和getter中開始和結束的地方加鎖了。

stackoverflow上面對atomic解釋贊同最多的答案:

atomic不等於安全執行緒,對於常見的引用、指標、4位元組(位寬位元組)的變數,其賦值操作本身就是原子的 ,沒有必要加上atomic,對於結構體類型,atomic才會起到作用。

  安全執行緒

安全執行緒問題是指多個線程在讀寫共用的變數時造成記憶體紊亂的問題,解決安全執行緒問題就必須保證多線程讀寫同一變數時代碼序列是串列的,保證讀寫過程中不會穿插執行。常用的方法除了使用安全執行緒方法、加鎖之外,還可以將讀寫的代碼放在同一個隊列中。

apple給出了一些線程不安全的類,這些類建立的對象(變數)在多線程中訪問是不安全的。通常不可改變的對象(Immutable)是安全執行緒的,可改變的對象不是安全執行緒的(mutable)。

安全執行緒的類:

  • NSArray

  • NSAssertionHandler

  • NSAttributedString

  • NSCalendarDate

  • NSCharacterSet

  • NSConditionLock

  • NSConnection

  • NSData

  • NSDate

  • NSDecimal functions

  • NSDecimalNumber

  • NSDecimalNumberHandler

  • NSDeserializer

  • NSDictionary

  • NSDistantObject

  • NSDistributedLock

  • NSDistributedNotificationCenter

  • NSException

  • NSFileManager (in OS X v10.5 and later)

  • NSHost

  • NSLock

  • NSLog/NSLogv

  • NSMethodSignature

  • NSNotification

  • NSNotificationCenter

  • NSNumber

  • NSObject

  • NSPortCoder

  • NSPortMessage

  • NSPortNameServer

  • NSProtocolChecker

  • NSProxy

  • NSRecursiveLock

  • NSSet

  • NSString

  • NSThread

  • NSTimer

  • NSTimeZone

  • NSUserDefaults

  • NSValue

  • NSXMLParser

  • Object allocation and retain count functions

  • Zone and memory functions

線程不安全的類:

  • NSArchiver

  • NSAutoreleasePool

  • NSBundle

  • NSCalendar

  • NSCoder

  • NSCountedSet

  • NSDateFormatter

  • NSEnumerator

  • NSFileHandle

  • NSFormatter

  • NSHashTable functions

  • NSInvocation

  • NSJavaSetup functions

  • NSMapTable functions

  • NSMutableArray

  • NSMutableAttributedString

  • NSMutableCharacterSet

  • NSMutableData

  • NSMutableDictionary

  • NSMutableSet

  • NSMutableString

  • NSNotificationQueue

  • NSNumberFormatter

  • NSPipe

  • NSPort

  • NSProcessInfo

  • NSRunLoop

  • NSScanner

  • NSSerializer

  • NSTask

  • NSUnarchiver

  • NSUndoManager

例如這樣聲明的對象:

@property (nonatomic , strong) NSMutableArray * array;

array在多線程訪問,比如一個線程遍曆數組,另外一個線程刪除或者插入元素時,程式會直接crash,提示指標異常。同樣的道理,atomic修飾的屬性,並不能保證多線程讀寫對象內部元素的安全性,因此atomic不是安全執行緒的。

 

 

IOS 類的屬性修飾符atomic

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.