Help us understand the problem. What is going on with this article?

Objective-Cでprivateなメソッドをオーバーライドする

More than 5 years have passed since last update.

superクラスのメソッドがprivateでどうしてもそれを継承先で上書きしたい場合、カテゴリで該当のメソッドを宣言しておいて実装することは可能。

具体的には、privateなメソッドhogeを持つSクラスに対して、Sを継承したクラスAの実装ファイルで次のようにする

//Sのカテゴリを記述
@interface S (Hoge)

//カテゴリとしてhogeメソッドを宣言
- (void)hoge;

@end

@implementation A

- (void)hoge
{
    //カテゴリで宣言されてないとsuper hogeはエラーになる
    [super hoge];

    //ここで何かオリジナルなことをやる
    //....
}

@end

どういう時に使うか

privateメソッドをオーバーライドしているので、この方法を積極的に使って良いとは言えないけど、例えば人が書いたソースコードなどでGitHubに上がってるわけでもなくforkできないし、記述をどうしても変更したくない(or変更できない)場合に本当に仕方なくやるならしょうがないかなと思うんですけどどうでしょうね…。

yimajo
株式会社キュリオシティソフトウェアの代表です。iOSアプリを作っています。最近はCombine frameworkガイドブック / RxSwift研究読本などを書いてます。
https://swift.booth.pm/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away