In an iPhone app, I need to customize the look of a UINavigationController class. For instance, make the bar and font size bigger. My client really needs that, and bigger buttons aswell.
So, instead of writing the class from scratch, I decided to subclass UINavigationController. My question is, can I customize any method or attribute’s default value? Is there any restriction while subclassing a class?
It depends what you mean by “restriction”. The runtime will not prevent you from subclassing whatever you like, but there are a few gotchas. (Although your answer is specifically about UINavigationController, the title and concept are bigger, so I’ll address the bigger issues.)
@privateand child classes cannot access, versus the default of@protected, which are accessible.In this case, you’re exactly right to not write the class from scratch — that would be a Bad Idea™. If you want to change the default value of an attribute (field?), you can set the desired value in an initializer after calling the parent’s initializer. However, if you do this, make sure you’re not hosing something in the parent class, and always test thoroughly.
Apple has reserved methods that start with “_” for their own use, so I’d echo Marc’s caution to not touch those at all. Everything else is fair game, within reason of course. 🙂