NSUserDefaults
has a different use case than variables in your code.
The data is packed into a plist representation and needs to be stored to disk (well, at least when it gets synchronized), or read from disk (or from the cache, or some other implementation detail Apple sees fit). In any case, using the defaults should typically be much slower than using a simple variable. And the bigger the user defaults get, the higher the impact, as it will most probably store/read all of it every time. If it will matter in your use case is a different question that we cannot answer.
Use the approach that suits your needs: NSUserDefault
to persist settings between application launches, and variables for normal operation. There's nothing wrong with having the settings cached in a local variable and only persisting changes (maybe not every time something changes).