Iphone 目标c类为什么返回-(id)而不是它';我们自己的班级
我来自一个C#背景,初始化一个类,然后像这样返回它自己Iphone 目标c类为什么返回-(id)而不是它';我们自己的班级,iphone,objective-c,Iphone,Objective C,我来自一个C#背景,初始化一个类,然后像这样返回它自己 public class MyClass{ public int Id; public string Name; } MyClass classInstance = new MyClass(); : : 我知道c#与objective c不同,但我正试图找到一种方法来轻松理解objective c是如何工作的,从而使转换更容易。并找出最佳实践 无论如何,我的问题是,为什么必须创建一个方法并返回一个“id”,而不是返回它自己的类型
public class MyClass{
public int Id;
public string Name;
}
MyClass classInstance = new MyClass();
:
:
我知道c#与objective c不同,但我正试图找到一种方法来轻松理解objective c是如何工作的,从而使转换更容易。并找出最佳实践
无论如何,我的问题是,为什么必须创建一个方法并返回一个“id”,而不是返回它自己的类型?像这样:
- (id)initWithID:(NSInteger)id name:(NSString *)name
{
self = [self init];
if (self) {
self.ID = id;
self.name = name;
}
return self;
}
感谢您抽出时间由于继承,您在初始化方法中返回了类型为
id
的对象
这样想:您有一个类为
Foo
的对象。它有一个名为initWithWidgets
的init方法。现在,您创建了一个子类Foo
,并将其命名为Bar
。根据继承规则,它可以访问initWithWidgets
方法。如果initWithWidgets
的返回类型是Foo
,那么您的Bar
类将无法使用它来初始化自身!返回类型将不同于您尝试实例化的对象。因此,如果您使用id
,您的意思是“此对象的返回类型可以是任何类型”,并且对于子类来说是安全的 当方法返回类型为id
的对象时,表示该对象可以是任何类型。例如,如果您声明一个NSMutableArray
,您可以执行以下操作:
NSMutableArray *someArray = [[NSMutableArray alloc] init];
init
正在返回一个NSMutableArray
对象。但有时,init
方法可能返回父类,如本例中的NSArray
。使用id
类型可以返回任何对象。您的问题在这个线程中得到了回答:我确实已经看到了,但对我来说没有意义。我认为发布一个新问题会让我更容易回答另一个问题。如果它浪费了空间,我道歉,但它仍然帮助了我。没问题。也许参考资料可以帮助其他人。我明白了,这是有道理的!作为记录,我确实从另一个链接看到了一个问题的答案,我只是很难理解它。我觉得这更有道理。再次感谢