7

私は、クラスを初期化してから自分自身を返すという C# のバックグラウンドから来ました。

public class MyClass{
  public int Id;
  public string Name;
}

MyClass classInstance = new MyClass();
:
:

c# が目的の c とは異なることは知っていますが、目的の c がどのように機能して移行を容易にするかを簡単に理解する方法を見つけようとしています。また、ベスト プラクティスも見つけてください。

とにかく、私の質問は、メソッドを作成して、独自の型を返す代わりに「id」を返す必要があるのはなぜですか? そのようです:

- (id)initWithID:(NSInteger)id name:(NSString *)name
{
    self = [self init];
    if (self) {
        self.ID = id;
        self.name = name;
    }
    return self;
}

御時間ありがとうございます

4

2 に答える 2

11

id継承のため、初期化メソッドで型のオブジェクトを返します。

次のように考えてください: class のオブジェクトがありますFoo。と呼ばれるinitメソッドがありますinitWithWidgets。ここで、 のサブクラスを作成し、Foo名前を付けますBar。継承の規則により、initWithWidgetsメソッドにアクセスできます。の戻り値の型がinitWithWidgetsだった場合FooBarクラスはそれを使用してそれ自体を初期化できなくなります。戻り値の型は、インスタンス化しようとしているオブジェクトとは異なります。したがって、を使用するidと、「このオブジェクトの戻り値の型は任意の型にすることができます」と言って、サブクラスに対して安全です!

于 2012-11-13T21:29:12.127 に答える
4

メソッドが type のオブジェクトを返す場合id、それはオブジェクトが任意の型である可能性があることを意味します。たとえば、 を宣言する場合はNSMutableArray、次のようにします。

NSMutableArray *someArray = [[NSMutableArray alloc] init];

はオブジェクトinitを返していNSMutableArrayます。ただし、この例initのように、メソッドが親クラスを返す場合もあります。NSArrayこのid型を使用すると、任意のオブジェクトを返すことができます。

于 2012-11-13T21:30:06.747 に答える