Firstly, you must know than when you write
self.nextUIControl
it actually is compiled in
'return [self nextUIControl]'
The dotSyntax in objective-C is not to access the local variable like in java but to provide a more readable syntax to call the getters and setters.
So, in a getter for the property variable, you should not return self.variable, cause that would be an infinite loop.
If you want to return the local variable, you can't write _nextUIControl (this is your private local variable automatically generated by the property). However, here in this scenario, you are in a objective-C categorie, and, because of the 'protected' visibility doesn't exist in objective-C, the category cannot access directly _nextUIControl, so one has to use the syntaxe objc-get / objc-set to get and set the value for the object at the address &defaulthashkey.