Objective c 返回[super Init]的对象
嗯……我已经阅读并研究了[super init]在objective-c类继承中的表达式。甚至有些问题在stackoverflow上也得到了很好的解释和回答。然而,我仍然不太明白继承或[super init]是如何工作的 在其他语言中,超类对子类一无所知。超类无法返回子类的对象,因为超类不知道该子类。所以我的问题是表达式self=[super init]是否返回超类或子类的对象。这里我知道[super init]可以返回另一个对象或nil,这是有意义的。但假设一切正常,既不是零也不是返回另一个对象。如果它返回一个常规对象,它是否返回超类或派生类的对象,该类就是定义此self=[super init]的类。如果它返回一个超类的对象,那么它是有意义的,但是正如我们所知,超类的对象对子类一无所知,它如何访问子类的成员(字段、消息或方法)。如果它返回子类的对象,那么它就没有意义,因为超类无法返回派生类的对象,因为超类对此一无所知Objective c 返回[super Init]的对象,objective-c,Objective C,嗯……我已经阅读并研究了[super init]在objective-c类继承中的表达式。甚至有些问题在stackoverflow上也得到了很好的解释和回答。然而,我仍然不太明白继承或[super init]是如何工作的 在其他语言中,超类对子类一无所知。超类无法返回子类的对象,因为超类不知道该子类。所以我的问题是表达式self=[super init]是否返回超类或子类的对象。这里我知道[super init]可以返回另一个对象或nil,这是有意义的。但假设一切正常,既不是零也不是返回另一个对
对于那些从其他语言过渡到objective-C的人来说,这是一个非常令人困惑的方面。
self=[super init]
将从超类返回对象。但是,请注意,对象本身可能是在当前类上使用alloc
分配的
考虑以下几点:
@interface A : NSObject
- (instancetype)init;
@end
@interface B : A
- (instancetype)init;
@end
@implementation B
- (instancetype)init {
self = [super init];
if (self) {
// Do initialization for B
}
return self;
}
@end
创建类B
的新对象时,请执行以下操作:
B *obj = [[B alloc] init];
依次发生以下情况:
为对象分配足够的空间来容纳所有[B alloc]
B
- 对类
的新创建对象调用B
init
- 然后从
的init方法调用类B
上的A
init
- 类
上的A
将*返回分配有init
的B
的对象alloc
init
方法可能返回分配对象以外的另一个对象。这是允许的,也是您通常应该将结果分配给self
的原因
self=[super init]
将从超类返回对象。但是,请注意,对象本身可能是在当前类上使用alloc
分配的
考虑以下几点:
@interface A : NSObject
- (instancetype)init;
@end
@interface B : A
- (instancetype)init;
@end
@implementation B
- (instancetype)init {
self = [super init];
if (self) {
// Do initialization for B
}
return self;
}
@end
创建类B
的新对象时,请执行以下操作:
B *obj = [[B alloc] init];
依次发生以下情况:
为对象分配足够的空间来容纳所有[B alloc]
B
- 对类
的新创建对象调用B
init
- 然后从
的init方法调用类B
上的A
init
- 类
上的A
将*返回分配有init
的B
的对象alloc
init
方法可能返回分配对象以外的另一个对象。这是允许的,也是您通常应该将结果分配给self
的原因
那么您的意思是当调用[super init]时,属于或当前类的self的隐藏参数会随之传递?否则,我看不出超类如何返回子类的对象。因为和其他语言一样,超类对子类一无所知。是的,所有实例方法在调用时都会收到一个隐藏的self参数。实例方法是以“-”开头声明的,与以“+”开头的类方法(如alloc)相反。您的意思是当调用[super init]时,属于或当前类的self的隐藏参数会随之传递?否则,我看不出超类如何返回子类的对象。因为和其他语言一样,超类对子类一无所知。是的,所有实例方法在调用时都会收到一个隐藏的self参数。实例方法是用初始值“-”声明的,与以“+”开头的类方法(如alloc)相反。