我来自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;
}
感谢您的时间
答案 0 :(得分:11)
由于继承,在初始化方法中返回类型为id
的对象。
以这种方式思考:你有一个类Foo
的对象。它有一个名为initWithWidgets
的init方法。现在,您创建了Foo
的子类并将其命名为Bar
。根据继承规则,它可以访问initWithWidgets
方法。如果initWithWidgets
的返回类型为Foo
,那么您的Bar
类将无法使用它来初始化自己!返回类型将与您尝试实例化的对象不同。因此,如果你使用id
,你会说“这个对象的返回类型可以是任何类型”,并且你对子类是安全的!
答案 1 :(得分:4)
当方法返回类型为id
的对象时,表示该对象可以是任何类型。例如,如果您声明NSMutableArray
,则执行以下操作:
NSMutableArray *someArray = [[NSMutableArray alloc] init];
init
正在返回NSMutableArray
个对象。有时候,init
方法可以返回父类,例如本例中的NSArray
。使用id
类型允许返回任何对象。