What is the difference between atomic- and non-atomic properties? Which is the default for synthesized properties? When would you use one over the other?

When atomic properties are given, they will always yield a completely initialized object. This is also the default state for attributes that have been synthesized. While it is a good practice to declare atomic properties to avoid any chance for ambiguity, the properties will still be atomic if we leave them off. This atomic property guarantee comes at the expense of performance. However, if we know that obtaining an uninitialized value is not a concern (for example, if all access to the property is already synchronized via other ways), then set it to non-atomic can improve speed.