0

重複の可能性:
なぜself =[superinit]と呼ぶ必要があるのですか

私はObjectiveCの本を読んでいて、他のクラス(構成)を含むクラスを作成するために、self =[superinit]を使用します。

- (id) init
{
    if (self = [super init]) {
        engine = [Engine new];

        tires[0] = [Tire new];
        tires[1] = [Tire new];
        tires[2] = [Tire new];
        tires[3] = [Tire new];
    }

    return (self);

} // init

彼が別のクラスを作成しているとき、彼はこのinitメソッドを含めていません。使用するインスタンスオブジェクトを初期化する必要があることは理解していますが、なぜ彼がself =[superinit]を設定しているのかわかりません。クラスにはこのステートメントが必要です。

@interface Tire : NSObject
@end // Tire


@implementation Tire

- (NSString *) description
{
    return (@"I am a tire. I last a while");
} // description

@end // Tire
4

1 に答える 1

0

newは、クラスにalloc/initを実行するように指示するだけのクラスメソッドです。ここに文書化されています。上記のコードは次のように書き直すことができます。

- (id) init 
{ 
    if (self = [super init]) { 
        engine = [[Engine alloc] init]; 

        tires[0] = [[Tire alloc] init]; 
        tires[1] = [[Tire alloc] init]; 
        tires[2] = [[Tire alloc] init]; 
        tires[3] = [[Tire alloc] init]; 
    } 

    return (self); 

} 

そして、それはまったく同じ効果をもたらしますが、より多くのタイピングが必要になります。

EngineクラスとTireクラス内では、それらのinitメソッド(実装されている場合)はを使用しself = [super init]ます。initクラスがそのメソッドで特別なことを何もしない場合は、実装する必要はありませself = [super init]んが、実装する場合は、オブジェクトを適切に作成する必要があり、スーパークラスが重要な作業を行っている可能性があるため、を使用する必要があります。そのinitメソッド。

于 2012-08-01T07:56:13.977 に答える