Should i declare NSLock as atomic, or it's just a waste of time and the lock itself should be non atomic?
atomic makes setting and getting the property atomic, if the property doesn't need to be accessed atomically, maybe its only reads from multiple threads after if as been set, then it doesn't need to be atomic. Alternatively, how often is this property going to be called, you would need to call it pretty often in a loop to notice the effect of the property being atomic. you can also do things like call the property only once in a method and keep a local reference to it to reduce the overhead of it being atomic.
For properties, if there is any doubt I about whether it needs to be atomic or not, I usually make them atomic, if that creates a performance problem I can look at dealing with that later, but having a bug introduced because of a nonatomic property, is much more serious issue.