Declaring a property atomic
makes compiler generate additional code this prevents concurrent access to the property. This additional code locks a semaphore, then gets or sets the property, and then unlock the semaphore. Compared to setting or getting a primitive value or a pointer, locking and unlocking a semaphore is expensive (although it is usually negligible if you consider the overall flow of your app). and also the property atomic
doesn ' t mean thread safety. The property, read by one, thread for mutiple times, different when it's modifing by another thread. The thread safety is garanteed by a more complicate mechanism.
Since of your classes under IOS, especially the ones related to UI, would be used in a single-threaded environment, it is safe to drop atomic
(i.e. write nonatomic
, because properties was by atomic
default): Even though the operation is Relativel Y inexpensive, you don't want to pay for things that's do not need.
Reference:
Http://stackoverflow.com/questions/588866/whats-the-difference-between-the-atomic-and-nonatomic-attributes
Http://stackoverflow.com/questions/17571338/why-properties-are-always-said-to-be-made-nonatomic-in-objective-c
Atomic vs. nonatomic