1

Objective C の仕様 (Apple から) 49 ページ には、インスタンス変数を宣言するすべてのクラスは、それらを初期化するための init メソッドを提供する必要があると記載されています。

私の質問 - なぜこれが必要なのですか? NSObject はインスタンスの iVar を初期化しませんか?

init をコンストラクタと考える必要があります。

init は init と呼ばれる必要がありますか? できますか id anObject = [[SomeClass alloc] foo ];

ムチャス・グラシアス。

4

4 に答える 4

0

デフォルトinitのはインスタンス変数NSObjectに影響を与えません。仕様からのステートメントは、クラスのインスタンス変数としてまたはオブジェクトのようなものを使用している場合、それを初期化する責任があることを意味します。そして、これは通常、で発生しますが、他の方法で初期化することもできます。NSString *strNSDate *dinit

そして、はい[[SomeClass alloc] foo]、オブジェクトを返すことができます。

于 2012-04-07T15:33:37.243 に答える
0

クラスは通常、サブクラスの内部を認識しておらず、NSObjectもそのように違いはありません。

alloc+initは、チェーンが自動ではないことを除けば、コンストラクターに非常に似ています。

呼び出す必要はありませんがinit、最初から始めるのinitはほぼ普遍的です。例えば:

- (id)initWithString:(NSString *)string {
    self = [super init];
    if (self) {
        self.myString = string;
    }
    return self;
}
于 2012-04-07T15:36:13.183 に答える
0

init メソッドはコンストラクターに似ていますが、自動的には呼び出されません。自分で呼び出す必要があります。

「init」と呼ぶのは一般的な慣例ですが、必須ではありません。

于 2012-04-07T15:32:28.503 に答える