博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发-面试小计(一)
阅读量:7103 次
发布时间:2019-06-28

本文共 1548 字,大约阅读时间需要 5 分钟。

1:mrc 本质是什么? 一般都会说谁申请,谁负责释放。这句话没错。但是问的本质是什么? 这里先说说ARC的本质:是编译器在编译的时候主动加了内存管理的代码,那么他是如何管理的尼?那这代码是怎么管理的? 是不是在全局有一个hashmap,把对应的变量和引用计数放进去,然后在过了引用域之后,会把引用计数自动归0。 但是对象会被释放。

2:在block执行之前,修改变量,在block里面获取的是变量什么时候的值?用weak有什么用 毫无疑问的是,变量的最后一次赋值的数据。 首先block是分配到栈区的。必须先使用copy。 所以他的作用域就是在你创建的当前上下文,当你在该作用域外调用该block的时候,程序就会崩溃。 但是我们在使用block的时候不需要手动的去reain或者release。 也就是说在使用block的时候超出了作用域才需要copy。就是从栈区拷贝到堆区。着样搞完之后程序就不会奔溃。

3:在block写多个[self dosomathing1],[self dosomathing2],[self dosomathing3],,,,会有什么问题 这是一个尴尬的现象。为了避免就在block中先写一个strong self。 其实是为了避免在block执行过程中,突然出现self被释放的情况。 如果在持有self,但是不会产生循环引用的时候当你执行完block,如果没有其他对象持有的话,该block就是被释放掉, 从而bolck就不会持有self了。和uiview的动画的block一样

3:weakstrong的原理 自己写的 view 成员,应该用 weak 还是 strong?我个人觉得应该用 strong,因为用 weak 并没有什么特别的优势,加上上一篇面试题文章中,我们还看到,其实 weak 变量会有额外的系统维护开销的,如果你没有使用它的特别的理由,那么用 strong 的话应该更好。 另外有读者也提到,如果你要做 Lazy 加载,那么你也只能选择用 strong。 当然,如果你非要用 weak,其实也没什么问题,只需要注意在赋值前,先把这个对象用 addSubView 加到父 view 上,否则可能刚刚创建完,它就被释放了。 在我心目中,这才是我喜欢的面试题,没有标准答案,每种方案各有各的特点,面试者能够足够分清楚每种方案的优缺点,结合具体的场景做选择,

4:子线程是怎么回到主线程的?子线程为不能更新UI,同样都是自己的runloop 1:子线程回到主线程,是系统的线程调度问题。具体实现我不知道 2:有UIKit这样的框架一定要保证线程的安全。子线程不能更新UI,如果子线程和主线程都更新UI,那就可能会使程序崩溃。就是使对象释放两次了。即或不奔溃也会使UI错乱。也就是将UI操作方到主线程中去。因为在响应事件上就是更及时的,根本感觉不到变化。应为要更新UI都要等到子线程运行结束才执行。这时间很短,如果子线程一直在跑更新UI的函数,主线程是无法获取的,但然就没法更新。如果你搞一个按钮去点击去更换背景图片在等啊等的去换背景,如果还要看到他等待的这个时间的停顿,那这个响应就没必要了。 3:线程和runloop是一对一的 5:系统的内存分为几个区 1:栈区:存放局部变量,和函数参数 2:堆区:存放开辟内存的对象如:alloc,new。这里就是内存管理的地区 3:常量,静态区:存放consist和static修饰的对象

如有不对还请指导啊!!!!一块学习一块进步。

可以来微信公众号(洲洲哥)后台给我们留言。 快来扫码关注我们吧!

转载于:https://juejin.im/post/5a436b646fb9a04503105f27

你可能感兴趣的文章
BIND和DNS名称解析
查看>>
hadoop基本操作命令
查看>>
大型web项目解决方案
查看>>
根据模型大小,限定摄像头旋转角度(上,下,左,右)
查看>>
图文详解 正向代理,反向代理,透明代理
查看>>
haproxy之二
查看>>
tomcat在linux安装
查看>>
我的友情链接
查看>>
19个PHP模板引擎
查看>>
iphone的PC端管理软件开源项目
查看>>
ORA-65085: cannot open pluggable database in read-only mode问题解决
查看>>
mysql导入报错Variable 'sql_notes' can't be set to the value of 'NULL'
查看>>
升级Xcode8之后 XMPP 遇到重定义的问题 Redefinition of module 'dnssd'
查看>>
RHEL6.4 KVM虚拟化网卡桥接,PXE无人值守安装虚拟机
查看>>
我的友情链接
查看>>
PDF转换为SWF
查看>>
Maven项目下update maven后Eclipse报错:java.lang.ClassNotF
查看>>
linux开机启动流程
查看>>
Sublime Text Build 3017 x86 dev版发布
查看>>
JS判断移动端访问设备并解析对应CSS
查看>>