天天看點

Cocoa線程安全/非線程安全的類和函數彙總

線程安全的類和函數

下面這些類和函數通常被認為是線程安全的。你可以在多個線程裡面使用它們的同一個執行個體,而無需擷取一個鎖。

  • NSArray
  • NSAssertionHandler
  • NSAttributedString
  • NSCalendarDate
  • NSCharacterSet
  • NSConditionLock
  • NSConnection
  • NSData
  • NSDate
  • NSDecimal functions
  • NSDecimalNumber
  • NSDecimalNumberHandler
  • NSDeserializer
  • NSDictionary
  • NSDistantObject
  • NSDistributedLock
  • NSDistributedNotificationCenter
  • NSException
  • NSFileManager (in Mac 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
  • 還有對象的allocation和retain函數
  • Zone和記憶體函數

非線程安全類

以下這些類和函數通常被認為是非線程安全的。在大部分情況下,你可以在任何線程裡面使用這些類,隻要你在同一個時間隻在一個線程裡面使用它們。參考這些類對于的額外詳細資訊的文檔。

  • 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
  • User name and home directory functions

注意,盡管NSSerializer,NSArchiver,NSCoder和NSEnumerator對象本身是線程安全的,但是它們被放置這這裡是因為當它們封裝的對象被使用的時候,更改這些對象資料是不安全的。比如,在歸檔情況下,修改被歸檔的對象是不安全的。對于一個枚舉,任何線程修改枚舉的集合都是不安全的。

隻能用于主線程的類

以下的類必須隻能在應用的主線程類使用。

  • NSAppleScript