1. ホーム
  2. objective-c

[解決済み] Category is implementing method which will be implemented by its primary class" の警告を抑制する。

2023-01-03 10:21:52

質問

警告を表示しないようにするにはどうしたらよいのでしょうか。

カテゴリが実装しているメソッドは、プライマリクラスでも実装される予定です。 を実装しています。

特定のコードカテゴリに対して持っています。

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize {
    return [self aCustomFontOfSize:fontSize];
}

どのように解決するのですか?

カテゴリを使用すると、既存のクラスに新しいメソッドを追加することができます。すでにクラスに存在するメソッドを再実装したい場合は、通常、カテゴリではなくサブクラスを作成します。

Appleのドキュメントです。 既存のクラスをカスタマイズする

カテゴリで宣言されたメソッドの名前が カテゴリで宣言されたメソッドの名前が、元のクラスのメソッド、または同じクラス(あるいはスーパークラス)の 同じクラス (あるいはスーパークラス) の別のカテゴリにあるメソッドと同じである場合 実行時にどのメソッド実装が使用されるかは未定義です。 実行時にどちらのメソッド実装を使用するかは不定です。

同じクラスで全く同じシグネチャを持つ2つのメソッドは、それぞれの呼び出し元がどちらの実装を望むかを指定できないため、予測不可能な動作につながるでしょう。

そのため、カテゴリを使用してクラス用に新しくユニークなメソッド名を提供するか、クラス内の既存のメソッドの動作を変更する場合はサブクラスを使用する必要があります。