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