1. ホーム
  2. objective-c

[解決済み] Objective-Cで-initメソッドをprivateにすることは可能ですか?

2022-04-30 11:52:37

質問

を隠す(非公開にする)必要があります。 -init メソッドを作成しました。

どうすればいいのでしょうか?

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

Objective-CにはSmalltalkと同様、privateメソッドとpublicメソッドという概念はありません。 どんなメッセージでも、どんなオブジェクトにも、いつでも送ることができるのです。

できることは NSInternalInconsistencyException もし -init メソッドが呼び出されます。

- (id)init {
    [self release];
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                   reason:@"-init is not a valid initializer for the class Foo"
                                 userInfo:nil];
    return nil;
}

もう一つの方法は、おそらく実際にははるかに良い方法ですが、次のようにします。 -init は、可能な限り、あなたのクラスに対して何か賢明なことを行ってください。

もし、シングルトン・オブジェクトを確実に使用するために、このようなことをしようとしているのなら、気にする必要はありません。 具体的には、quot;overrideで悩まないでください。 +allocWithZone: , -init , -retain , -release シングルトンを作成する方法です。 これは事実上常に不要であり、何のメリットもないのに複雑さを増しているだけです。

その代わりに +sharedWhatever メソッドでシングルトンにアクセスし、それをヘッダでシングルトンインスタンスを取得する方法として文書化します。 ほとんどの場合、それで十分でしょう。