为什么要在自己的初始化方法里调用[super init]

时间:2022-04-14 19:41:49
我知道字面意思大概是完成父类的初始化,看看返回的是不是nil如果是nil就无法实现自己的初始化方法。
可不可以这样理解,就是自己的初始化方法其实和普通的方法一样,只有调用了在NSObject里的init方法后才能叫做自己的初始化方法
其实我还不是特别理解,希望又大神可以指导一下

5 个解决方案

#1


引用 楼主 u012066310 的回复:
我知道字面意思大概是完成父类的初始化,看看返回的是不是nil如果是nil就无法实现自己的初始化方法。
可不可以这样理解,就是自己的初始化方法其实和普通的方法一样,只有调用了在NSObject里的init方法后才能叫做自己的初始化方法
其实我还不是特别理解,希望又大神可以指导一下


其实就是一个类继承,子类调用父类的方法,因为你重载了父类的init函数,正常情况下,在对象初始化时就会进入你的init方法,父类的方法不会被调用到,而父类有一些初始化操作也是必须执行的,因此这种时候,就优先让父类初始化完毕,在执行子类自己的方法。

#2


是不是像这样的方法
- (id) initWithAge:(int)age;
如果写成这样
- (id) a :(int)age;
只要是这个方法里最后返回了self就是一个初始化方法了?(ps:我知道这样的命名是不对的,就是想知道是不是只要是return self,这个方法就是一个初始化方法了???)

#3


引用 2 楼 u012066310 的回复:
是不是像这样的方法
- (id) initWithAge:(int)age;
如果写成这样
- (id) a :(int)age;
只要是这个方法里最后返回了self就是一个初始化方法了?(ps:我知道这样的命名是不对的,就是想知道是不是只要是return self,这个方法就是一个初始化方法了???)


不是的,跟名字,返回值都没关系,就看你的方法是不是用来初始化的,仅此而已。
如果你约定了- (id) a :(int)age;是你这个对象的初始化方法,那么- (id) a :(int)age;就是初始化方法。
NSObject的初始化方法是-(id)init,所以后续的继承也就有了这个初始化方法,无非如果你的子类没实现-(id)init,那么将直接会调用到父类的-(id)init。

#4


谢谢你的回答!

#5


@dream238,回答得非常到位!!!

#1


引用 楼主 u012066310 的回复:
我知道字面意思大概是完成父类的初始化,看看返回的是不是nil如果是nil就无法实现自己的初始化方法。
可不可以这样理解,就是自己的初始化方法其实和普通的方法一样,只有调用了在NSObject里的init方法后才能叫做自己的初始化方法
其实我还不是特别理解,希望又大神可以指导一下


其实就是一个类继承,子类调用父类的方法,因为你重载了父类的init函数,正常情况下,在对象初始化时就会进入你的init方法,父类的方法不会被调用到,而父类有一些初始化操作也是必须执行的,因此这种时候,就优先让父类初始化完毕,在执行子类自己的方法。

#2


是不是像这样的方法
- (id) initWithAge:(int)age;
如果写成这样
- (id) a :(int)age;
只要是这个方法里最后返回了self就是一个初始化方法了?(ps:我知道这样的命名是不对的,就是想知道是不是只要是return self,这个方法就是一个初始化方法了???)

#3


引用 2 楼 u012066310 的回复:
是不是像这样的方法
- (id) initWithAge:(int)age;
如果写成这样
- (id) a :(int)age;
只要是这个方法里最后返回了self就是一个初始化方法了?(ps:我知道这样的命名是不对的,就是想知道是不是只要是return self,这个方法就是一个初始化方法了???)


不是的,跟名字,返回值都没关系,就看你的方法是不是用来初始化的,仅此而已。
如果你约定了- (id) a :(int)age;是你这个对象的初始化方法,那么- (id) a :(int)age;就是初始化方法。
NSObject的初始化方法是-(id)init,所以后续的继承也就有了这个初始化方法,无非如果你的子类没实现-(id)init,那么将直接会调用到父类的-(id)init。

#4


谢谢你的回答!

#5


@dream238,回答得非常到位!!!