客观c类为什么返回 - (id)而不是它自己的类

gdu*_*ubs 6 iphone objective-c

我来自一个C#背景,你初始化一个类,然后像这样返回自己

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

MyClass classInstance = new MyClass();
:
:
Run Code Online (Sandbox Code Playgroud)

我知道c#与目标c不同,但我正试图找到一种方法来轻松理解客观c如何使转换变得更容易.并找出最佳实践.

无论如何,我的问题是为什么你必须创建一个方法并返回一个"id"而不是返回它自己的类型?像这样:

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

谢谢你的时间

jms*_*617 11

id由于继承,您在初始化方法中返回类型的对象.

可以这样想:你有一个阶级对象Foo.它有一个名为的init方法initWithWidgets.现在,您创建一个子类Foo并命名它Bar.根据继承规则,它可以访问该initWithWidgets方法.如果返回类型initWithWidgetsFoo,那么您的Bar类将无法使用它来初始化自己!返回类型将与您尝试实例化的对象不同.因此,如果您使用id,您会说"此对象的返回类型可以是任何类型",并且您对子类是安全的!