iOS中创建一个对象的调用方法顺序

iOS中创建一个对象的调用方法顺序

今天写个demo来证实下iOS内创建一个应用的时候,各个方法(alloc allocWithZone init initWithFrame)的调用顺序

结论

这里直接写结论了。想看流程的,自己下载项目打断点看吧。

  1. allocWithZone
  2. alloc
  3. initialize 在该类第一次调用的时候会执行该方法、且只执行一次
  4. initWithFrame
  5. init

在外部调用init(不是initWithFrame)的时候,会先进到override的init方法内,然后在init的作用域内,调用[super init]方法,此时会调用initWithFrame方法

总结
  • initialize:在该类第一次调用的时候会执行该方法、且只执行一次
  • 当外部调用init方法的时候,会默认调用initWithFrame方法
  • 当外部调用initWithFrame方法的时候,是不会调用init方法的
  • alloc:外部调用alloc方法的时候,会默认先调用allocWithZone方法

所以,如果想要自定义一个事件(函数)的时候, 写在initWithFrame方法中会比较可靠

另外,还要说一点allocnew的区别

alloc:分配内存。

init:初始化。

new:代替上面两个函数:分配内存,并且初始化。

注意:

两者区别:
1. alloc的时候调用了allocWithZone它给对象分配内存的时候,一般是把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的内存,提升了程序处理速度。

另外

  • 不推荐使用new:
    使用new的话,初始化方法被固定死只能使用init,不能调用其他的initXX方法
  • 采用new方法只能采用默认的init方法完成初始化,采用alloc的方式可以用其他定制的初始化方法。

DEMO地址

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值