IOS培训
美国上市IOS培训机构

400-111-8989

热门课程

iOS开发面试常问的知识点小结

  • 时间:2017-10-26
  • 发布:iOS培训
  • 来源:IOS职场

1:mrc 本质是什么?

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

:在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:weak和strong的原理

自己写的 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修饰的对象

如果有不对的地方还请指正!!!一块学习一块进步,一块都进BAT

上一篇:iOS工作中会遇到的19个小问题经验总结
下一篇:BAHome:iOS 面试题收藏录

iOS 秋招总结 = 面经 + 闲言碎语(携程、阿里、京东、腾讯)

iOS面试题集合(BAT及各大中小型公司)

BAHome:iOS 面试题收藏录

iOS开发面试常问的知识点小结

选择城市和中心
贵州省

广西省

海南省