今天上午,下午分别面试了两家公司。上午是一家互联网公司,气氛还比较好,是我比较喜欢的。技术这块是直接机试,主要是给了些BUG让我修复,整个过程还算顺利。下午去了一家大型的证券公司。整理技术问题如下:

1. UIView的生命周期是什么样的,执行顺序是怎么样的?
init —— loadView —— viewDidLoad —— viewWillAppear —— viewWillDisappear —— viewDidUnload —— dealloc.

2. UIViewController在什么时候会加载UIView,换句话说,技术上在哪个时间点会执行loadView。
这个问题我没有答上来,原来写程序只知道是在addSubview或pushViewController的时候,程序就会执行loadView。于是觉得,loadView是在UIView要被显示出来之前执行的。后来了解到,这种说法其实有点本末倒至了。是因为执行了loadView,所以UIView才会被显示出来。正确的答案是,在view对象第一次被访问的时候,会执行loadView。

3. UITableView的执行流程是怎么样的?
省去UIView相关的不说,就UITableView来说,每个UITableView都会有一个delegate,delegate指向的对象会接受UITableView的委托从而实现一系列的方法。其主要的几个方法执行顺序如下:
numberOfSectionsInTableView——numberOfRowsInSection——titleForHeaderInSection——cellForRowAtIndexPath

4. UITableView是怎样实现Cell的重用的?
UITableView中有一个数组,visibleCells,保存可视的cell。假设一屏可以显示10个cell。当向上滑动tableView时,第1个cell移出可视范围,同时第11个cell显示出来。如果cell是通过dequeueReusableCellWithIdentifier方法得到的,其本质上,是将第一个cell放到第11个的位置,然后内容按照indexPath的要求重绘出来,但并不会清除cell中的subView。这也是为什么在cell中添加了UILabel后,上下拉动时,会有重影(多个UILabel重叠)。要避免此情况,Apple推荐自定义UITableViewCell。如果不自定义cell的话,可以为不同indexPath的cell定义不同的cellIdentifier。或是每次都通过遍历subview删除所有子视图,再重新addSubView,等等。

5. 如何设计一个可变高度(根据内容自适应高度)的UITableViewCell?
这个真是让人蛋疼,我原来确实没有遇到过这样的需求,做法都是定高,然后文字内容多了,直接省略,引导用户点击进入下一层观看。当时间歇性脑残的说了句不知道,后来想想,真的很简单:
我们在configureCell的时候,通过sizeWithFont方法获取UILabel的CGSize,从而得出自定义cell的高度,然后在heightForRowAtIndexPath里进行对应的赋值就可以了。-_-!!!

6. 谈谈内存管理机制。
这个大家基本都了解,Objective-C是通过retainCount来决定是否回收内存。每个NSObject都有一个计数器retainCount,当alloc时,retainCount的值为1,并且每次retain都会加1,release会减1,当retainCount为0的时候,内存会被释放。由此引发了另一个问题,NSString通过stringWithString创建的对象,他的作用域是什么呢?什么时候会被释放?我觉得,通过上述静态方法创建的对象约等于,[[[NSString alloc] initWithString:@”"] autorelease]; 也就是说,他是一个autorelease的对象,被放入NSAutoreleasePool中。系统会为每个RunLoop建立一个NSAutoreleasePool,当RunLoop结束时,autoreleasePool里的内存将被释放。
注:答题时我混淆了闭包和RunLoop的概念,把RunLoop说成了闭包。后面讲Block会谈到。

7. 谈谈对block的了解。
block才是闭包。闭包是一个函数或指向函数的指针,再加上其外部变量(也叫自由变量)。block有三种,NSConcreteGlobal, NSConcreteStack, NSConcreteMalloc。block是可以访问block外部的变量的。
NSConcreteGlobal: 就像一个全局函数一样,从头到尾待在那,始终是可用的。当Block中没有引用外部变量时,block为global类型的。
NSConcreteStack: 保存在栈中的block,block执行完后内存会被释放掉。当block引用了外部变量时,block为stack类型的。
NSConcreteMallock: 保存在堆中的block,block为引用记数为0时,内存会被释放掉。当block执行copy时,block会从栈中复制到堆中。
以上都针对非ARC环境而言,如果在ARC环境下,引用外部变量的block会自动保存在堆中,无需copy。

目前整理的就这么多,KVO,Delegate等设计模式今天没谈到。还有7个公司的面试等着哥呢,海量投简历的孩纸伤不起啊。我会持续更新。

转载于:https://www.cnblogs.com/lingzhao/p/3731272.html

iOS面试题 第一天相关推荐

  1. 史上最全的iOS面试题及答案

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

  2. 那些著名或非著名的iOS面试题(中)

    接上篇:那些著名或非著名的iOS面试题(上),本文继续介绍一些著名或非著名的iOS面试题. 1. 反转二叉树,不用递归 /*** Definition for a binary tree node.* ...

  3. 2019最新iOS面试题及答案

    1. Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-C的类不可以多重继承;可以实现多个接口,通过实现 ...

  4. iOS 面试题--转自唐巧

    iOS 面试题(一)寻找最近公共 View 题目:找出两个 UIView 的最近的公共 View,如果不存在,则输出 nil . 分析:这其实是数据结构里面的找最近公共祖先的问题. 一个UIViewC ...

  5. 2018最全的iOS面试题及答案

    最全的iOS面试题及答案 iOS面试小贴士 ---------------回答好下面的足够了------------------------------------- 多线程.特别是NSOperati ...

  6. iOS面试题集锦附答案及必需具备的知识

    面试看面试官水平和心情,我遇到一本正经的问题还有"安卓用三个按键,苹果为什么只有一个 home键?""你觉得你是个有爱的人吗?""你男朋友是在哪里做什 ...

  7. 史上最浅的ios面试题,重复了

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

  8. 腾讯—最新iOS面试题总结

    关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教.主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧. 腾讯 一面 1.介绍一下实习的项目,任务分 ...

  9. 备战金三银四,2021最全100道高频iOS面试题分享上(含答案)

    原作者:执笔续春秋 iOS面试题 本面试题为个人使用版本,如后续流传出去,请转发的朋友务必注释一下,答案正确性有待商榷,本人的答案不代表权威,仅仅是个人理解. 文章内部有写混乱,将就着看吧.另外大部分 ...

最新文章

  1. 【c语言】字符串逆序
  2. SpringBoot+MyBatis+ElementUI中对于时间格式化问题的处理
  3. 博物馆守卫问题(世界名画展览馆)
  4. C# C/S 图片验证码功能源码
  5. angularjs初始化时不显示模板内容, 不显示html, 不显示template
  6. 对Chrome自动发送邮件插件的改进
  7. 心理正常与异常的区分_正常心理与异常心理的区分
  8. php 5.6.27 在某些机器上正常,thinkphp5开发的网站出现”No input file specified”(php版本5.6.27)...
  9. java三元运算符_java三元运算符详解
  10. Unity3D插件之FingerGestures:手势插件
  11. 资源汇总 | 墨天轮2021年数据库技术直播回顾
  12. 百分点大数据技术团队:互联网舆情系统的架构实践
  13. 基于北斗导航定位系统的设计与实现(论文+程序设计源码+数据库文件)
  14. 什么是危机公关与舆情监测?
  15. 狭义相对论最基础的知识
  16. PytestUnknownMarkWarning: Unknown pytest.mark.T1 - is this a typo? You can register custom marks to
  17. Cesium 飞行漫游 贴地漫游
  18. 18种最佳免费Adobe Photoshop替代品
  19. EyouCMS石材板材建筑材料公司网站模板源码+后台
  20. Laravel 文件下载及下载页面展示

热门文章

  1. 监控ui_做了10年监控系统,有些经验想和你分享
  2. ios 权限提示语_撩妹神技?iOS 微信偷偷上线“拍一拍”
  3. JVM - 常见的JVM种类
  4. idea 设置识别ini文件
  5. 049_Image图片
  6. 001_Servlet简介
  7. 将mysql日期格式转换_如何将日期时间格式转换为mysql日期格式?
  8. 野火开发版屏幕_盘一盘那些年我们常用的物联网开发板!
  9. 你应该更新的Java知识
  10. Android WebView 和 javaScript的互相调用(一)