Properties

Use properties while keeping direct variable access when performance is important.

The same principle could be used across all the library. First discussed in #118.
this property used to be atomic, now it's changed to nonatomic. Are we sure there is no concurrent access to it, explaining the original omitted `atomic`.