iPhone アプリでは、UINavigationController クラスの外観をカスタマイズする必要があります。たとえば、バーとフォント サイズを大きくします。私のクライアントは本当にそれを必要としており、さらに大きなボタンも必要としています。
そこで、クラスをゼロから作成する代わりに、UINavigationController をサブクラス化することにしました。私の質問は、メソッドまたは属性のデフォルト値をカスタマイズできますか? クラスをサブクラス化する際に制限はありますか?
iPhone アプリでは、UINavigationController クラスの外観をカスタマイズする必要があります。たとえば、バーとフォント サイズを大きくします。私のクライアントは本当にそれを必要としており、さらに大きなボタンも必要としています。
そこで、クラスをゼロから作成する代わりに、UINavigationController をサブクラス化することにしました。私の質問は、メソッドまたは属性のデフォルト値をカスタマイズできますか? クラスをサブクラス化する際に制限はありますか?
いいえ、お気軽に発狂してください。多くの Cocoa クラスは、他のクラスほどサブクラス化に適しておらず (特に、デリゲート コントロールに依存することを意図したもの)、必要な機能を公開しない可能性がありますが、プライベートではないメソッド (_ で始まる) を自由にサブクラス化できます。プレフィックス)。本当にしたい場合は、それらをサブクラス化することもできますが、iPhone では、Apple がアプリを拒否する可能性があります。
「制限」が何を意味するかによって異なります。ランタイムは、好きなようにサブクラス化することを妨げませんが、いくつかの問題があります。(あなたの答えは具体的には UINavigationController に関するものですが、タイトルとコンセプトはより大きなものであるため、より大きな問題に対処します。)
@private、子クラスはアクセスできませんが、デフォルトの@protectedはアクセス可能です。この場合、クラスをゼロから作成しないのはまったく正しいことです — それは悪い考えです。属性 (フィールド?) のデフォルト値を変更したい場合は、親の初期化子を呼び出した後、初期化子で目的の値を設定できます。ただし、これを行う場合は、親クラスで何かをホストしていないことを確認し、常に徹底的にテストしてください。
Apple は "_" で始まるメソッドを独自に使用するために予約しています。もちろん、他のすべては当然のことです。:-)