What you're doing is ok, but has some implications that you should be aware of.
NSUserDefaults is disk-based storage. As such is it significantly slower than memory-based solutions. On iOS, "disk-based" means flash memory, which is still significantly slower than memory-based storage.
Flash memory also has a limited number of write cycles before it fails.
For these 2 reasons, I would not use the above technique for values that change rapidly, or where you require fast response.
Also, I'm assuming that since you say "...synced across my app..." you mean shared between multiple objects.
I would suggest making sure to document these properties in your header so it's clear that they are shared, persistent properties. Adding the words "shared" or "saved" to those property names would be a help, in addition to descriptive text in the header.
If your only requirement is shared access, and you don't need persistence, you might look at using a data container singleton instead of using user defaults. (You create a singleton object that has properties that you want to share, and then you fetch a pointer to the singleton from anywhere in your app and use it to read/write the properties that you want to share.)
You could even use a hybrid approach, where you collect these properties in a singleton, and implement persistence in the singleton. This has the advantage of centralizing your save/read logic in one place, so you can change it to use a different storage method if you decide to at some future date.