专栏首页陈满iOSiOS开发小坑·不要initWithFrame和init两个方法都放

iOS开发小坑·不要initWithFrame和init两个方法都放

小坑
  • 自定义的逻辑可以放在 initWithFrame,不要放在 init。不要两个方法都放,因为你放 initWithFrame 就足够了,即使你实际只调用 init 来初始化。
  • 这是因为,init 内部会调用父类的 initWithFrame: 方法,只不过传入的 frame 的值为0。然后,父类的 initWithFrame: 方法发现当前的调用对象是子类对象,所以就调用了子类的 initWithFrame 方法了。这是一个多态的应用。
验证
  • 打个断点可以查看调用栈
结论
  • init 方法最终会调用自己的 initWithFrame: 方法,所以不要两个方法都去实现,两个都去实现就重复执行了。一般可能也看不出来影响,但在要添加KVO观察者逻辑的时候就非常致命。
  • 一般只实现 initWithFrame: 即可,在这里面放你自己的初始化逻辑。
  • 这样一来,当你创建对象的时候就可以灵活选择:既可以通过 init 来初始化,也可以通过 initWithFrame:来初始化。
  • 像上面的截图就是错误的演示,init 那一部分完全没必要。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

    【摘要】这篇文章,首先在第1节中介绍Block的定义,以及与C里面函数的对比。然后,第2节介绍实际开发中经常会用到的Block语法形式,以供读者日后查阅。只知道...

    陈满iOS
  • iOS开发小点·移除所有子视图

    陈满iOS
  • iOS开发·KVC:字典转模型,防止因本地未定义字段(后台的字段与本地字符串名不一致)导致数据转换过程中的奔溃

    更重要的是,有时候在iOS面试的时候,部分面试官会不仅问你某种场景会用到什么框架,更会问你如果要你来实现这个功能,你有没有解决思路?所以,自己实现字典转模型还是...

    陈满iOS
  • 商务部或将否掉英伟达对ARM并购;美法院暂缓下架TikTok;华为把对美投资转移到俄罗斯

    中国工程院院士倪光南表示,中国完全有可能通过努力,在一个新的时期内尽快赶上,把短板弥补。“我们面临一个任务,就是要建立自己的信息技术体系,因为这个信息领域不是单...

    SDNLAB
  • 三星将于明年上半年发布智能音箱,或搭载AI助手Bixby | 热点

    镁客网
  • document、body对象的事件

    onload页面加载完毕时触发,浏览器是一边下载文档,一边解释执行,可能会出现javascript执行时需要某个还没有加载的元素,如果这样需要把操作的代码放到o...

    用户7657330
  • 【Vue原理】Component - 源码版 之 挂载组件DOM

    我们知道,在生成 VNode 之后,下一步就是根据 VNode 生成DOM然后挂载了

    神仙朱
  • Hadoop2.7.6_04_HDFS的Shell操作与常见问题

    1、集群启动后,可以查看文件,但是上传文件时报错,打开web页面可看到namenode正处于safemode状态,怎么处理?

    踏歌行
  • Google、Facebook等昨晚连开三场AI大会,全部要点都在这里

    李林 舒石 编译整理 量子位·QbitAI出品 太平洋时间2017年3月8日,西方的传统黄道吉日,宜开大会。 Google、Facebook和Udacity三家...

    量子位
  • NB_35A板SIM卡无信号

    之所以起作用,是因为 Vue 将v-for的整个第一部分直接提升到函数的参数部分:

    卜卜-Totoro

扫码关注云+社区

领取腾讯云代金券