前言
目前处于无业游民状态,所以想整理下之前学的东西和iOS开发的知识,顺带也和大家分享下。
初始化
对于一个类的初始化函数,想必大家都知道的是init
,+load
,+ initialize
。比如说继承button的时候,一般都会这样写:
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
{
return self;
}
是的,我想这是大部分人初始化的时候做的事情,然后在函数里写上初始化需要做的事情。Objective-C 有指定初始化方法(designated initializer)和间接(secondary initializer)初始化方法的观念。讲道理呢,一个类应该有且只有一个 designated 初始化方法,其他的初始化方法应该调用这个 designated 的初始化方法。
首先是designated 初始化方法,例如继承一个NSObject
类的函数(定义基础的model类或者其他):
- (instancetype)init{
if (self = [super init]) {
//开始初始化
}
return self;
}
接下来呢,可能我们需要有带参数的初始化,可以使用secondary初始化方法:
- (instancetype)initWithApp:(NSString *)app{
if (self = [self init]) {
//对参数进行初始化
}
return self;
}
这样做有什么好处呢?首先,这是一种很优良的结构设计,能有效的减少代码量。
initialize
关于initialize
夏夏了解的也不是很多,在苹果开发者文档里是这么写的:“Initializes the class before it receives its first message.Superclasses receive this message before their subclasses. ”意思就是说在类收到第一个message的之前时候,他就会进行调用,而且更有趣的是,和继承不同,他先调用的是自己的父类。对于initialize
的具体使用夏夏也没有经验,感觉是某些只想执行一次的函数可以在里面使用,但是他是在一开始就执行的函数,所以可能这个类的实例还没构造完成,会产生某些不良情况?
load
对于load
函数呢,更多的是在ViewController
里和ViewDidLoad
函数做对比。load
函数执行是这样的,只要你包含了这个函数,就会去执行(是的,不需要去实例化)。很神奇有木有!一般在laod
函数里用runtime
进行函数的替换。
网友评论