iOS 题库

1、UIView和CALayer的主要区别和联系

UIView基于UIKit框架,CALayer基于quartzCore框架,虽然都是对象,但是CALyaer直接继承UIResponder。也就是说,UIView可以进行事件的传递。
所以简单理解为:UIView是一个骨架,CALayer给它化妆。
其次,UIView的创建会自带一个layer属性,所以UIView也可以理解为一个CALyer的访问器,内部访问CALayer的相关属性。
最后,view显示在界面,view作为layer的delegate,view展示的内容时调用的layer方法返回。

2、iOS中Weak的底层实现原理

Runtime会维护一个weak表,用于维护指向对象的所有weak指针。weak是一个哈希表,其key为所指对象的指针,value为weak指针的地址数组。
具体过程如下:
1、初始时:runtime会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址。
2、添加引用时:objc_initWeak函数会调用objc_storeWeak函数,更新指针指向,创建对应的弱引用表。
3、释放时:调用clearDeallocating函数。clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。

3、iOS编译流程

源代码->预处理器->编译器->汇编->机器码->链接->可执行文件

  • iOS静态库与动态库
    静态库:链接时会被完整复制到可执行文件中,被多次使用就有多份拷贝
    动态库:链接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用,节省内存

  • 内存优化

  • 检测内存问题的一般方法:
    1、静态检测方法
    2、动态检测方法 instruments
    3、dealloc
    4、第三方自动检测库

  • 判断对象要不要回收的唯一依据:引用计数是否为0

  • assign与weak都是弱引用类型,最大的区别在哪?
    weak 声明的变量对象释放后自动清空,赋值为nil,
    assign 声明的变量对象释放后不会自动赋值为nil,会造成野指针错误

内存管理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值