企业网站建设分为那几个阶段,帝国cms网站,网站源码带手机版,青岛餐饮加盟网站建设今天上午#xff0c;下午分别面试了两家公司。上午是一家互联网公司#xff0c;气氛还比较好#xff0c;是我比较喜欢的。技术这块是直接机试#xff0c;主要是给了些BUG让我修复#xff0c;整个过程还算顺利。下午去了一家大型的证券公司。整理技术问题如下#xff1a; … 今天上午下午分别面试了两家公司。上午是一家互联网公司气氛还比较好是我比较喜欢的。技术这块是直接机试主要是给了些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都会有一个delegatedelegate指向的对象会接受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都会加1release会减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: 保存在栈中的blockblock执行完后内存会被释放掉。当block引用了外部变量时block为stack类型的。 NSConcreteMallock: 保存在堆中的blockblock为引用记数为0时内存会被释放掉。当block执行copy时block会从栈中复制到堆中。 以上都针对非ARC环境而言如果在ARC环境下引用外部变量的block会自动保存在堆中无需copy。 目前整理的就这么多KVODelegate等设计模式今天没谈到。还有7个公司的面试等着哥呢海量投简历的孩纸伤不起啊。我会持续更新。 转载于:https://www.cnblogs.com/songfeixiang/p/3733647.html