iOS关于初始化你知道多少?

作者: __夏至未至 | 来源:发表于2016-07-04 10:57 被阅读1021次

    前言

    目前处于无业游民状态,所以想整理下之前学的东西和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进行函数的替换。

    相关文章

      网友评论

        本文标题:iOS关于初始化你知道多少?

        本文链接:https://www.haomeiwen.com/subject/rtscjttx.html