加载对象时常见的调用的方法

 
  • - (instancetype)initWithCoder{} // 对象是从xib/storyboard创建的时候才会调用 initWithCoder
  • - (instancetype)initWithFrame:(CGRect)frame {} // 使用代码创建的对象的时候调用initWithFrame
  • - (instancetype)init{} // 方法内部调用initWithFrame方法
 
1.加载Xib或者自定义storyboard中的view的时候会调用这个方法初始化   - (void)awakeFromNib
//能调用这个方法,表示对象创建好
- (void)awakeFromNib
{
    NSLog(@"%s",__func__);
}
 
// 对象不一定创建好,设置数据可能无效
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
  
    if (self = [super initWithCoder:aDecoder])
    {
        NSLog(@"%s",__func__);
    }
    return self;
}
 

 

总结: 

  • 自定义从xib或者storyboard中的对象时,最好同时实现上面initWithCoderawakeFromNib两个方法。
  • 代码的方式自定义view对象时,应该调用initWithFrame或者init方法。
 

- (void)loadView:当第一次使用控制器的view的时候就会调用(也可以理解为当控制器的view要显示的时候就调用)

简单自定义如下:
- (void)loadView
{
    //错误原因:不能在自定义view中调用view的set方法,因为这时候还没有创建出view(view都还没有创建,拿来的尺寸呢)
//    UIView *view = [[UIView alloc]initWithFrame:self.view.frame];//出错
//1.自定义一个UIView UIView *view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds]; //2.将这个自定义的view赋值给控制器的view self.view = view; self.view.backgroundColor = [UIColor redColor]; //调用系统的那一套 // [super loadView]; }

 

 

+ (void)load{},加载类的时候调用。也就是说,ios应用启动的时候,就会加载所有的类,就会调用这个方法。

这样有个缺点,当加载类需要很昂贵的资源,或者比较耗时的时候,可能造成不良的用户体验,或者系统的抖动。这时候,就要考虑initialize方法了。这个方法可看作类加载的延时加载方法。类加载后并不执行该方法。只有当实例化该类的实例的时候,才会在第一个实例加载前执行该方法(懒加载)。

+ (void)initialize{} 会在运行时仅被触发一次,如果没有向类发送消息的话,这个方法将不会被调用。这个方法的调用是线程安全的。父类会比子类先收到此消息。

 如果希望在类及其Categorgy中执行不同的初始化的话可以使用+(void)load, 这个方法对动态库和静态库中的类或(Category)都有效.

 

* 一个类的+load方法在其父类的+load方法后调用

* 一个Category的+load方法在被其扩展的类的自有+load方法后调用

要点:

1、initialize和load,我们并不需要在这两个方法的实现中使用super调用父类的方法。

2、load和initialize被调用一次是相对runtime而言 ,你可以当作普通类方法多次调用。

3、类加载到系统的时候就用调用load方法,类首次使用的时候调用initialize方法。

4、load不像普通方法一样遵从那套继承规则,当某个类没有实现 load方法,不管各级超类是否实现,系统都不会调用此类的load方法。initialize与其他方法一样,如果某个类没有实现initialize方法,而超类实现了,那么就会执行超类的这个方法.

转载于:https://www.cnblogs.com/ybzad/p/4884096.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值