前几天去了金山的wps部门面试ios的开发实习生,虽然好像是勉强过了二面,但好像还是gg了,总结一下面试时问到的问题
1.如何在不改动项目原有的代码前提下,使项目中每个Controller的viewDidLoad方法都输出一句话?(不能在原有的文件添加删除或改掉代码,但可以新建文件写代码)
2.除了使用view.layer.cornerRadius来设置圆角以外,还有什么其它方法设置圆角,使用view.layer.cornerRadius有什么坏处?
3.view和layer有什么区别?
4.block有几种类型?分别是?
5.block中如何防止循环引用?为什么在block中要加入__strong __typeof?
6.利用cocoapods管理第三方库,是如何实现读取pod工程中的文件的?
7.说说arc的工作原理,他是如何管理对象或变量的释放?
8.说说ios中多线程有哪几种实现方法?谈谈对gcd的理解?
我就记得这么多了,有些问题忘了,还有些是我的项目中具体的问题。
答案:
1.先创建一个新的文件实现一个方法输出一句话,然后利用runtime机制把uiview中的viewDidLoad方法与新建的方法进行交换,具体实现看这篇文章
2.总共3种方法
1.通过设置layer.cornerRadius
2.使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角
3.使用CAShapeLayer和UIBezierPath设置圆角
具体实现看这篇文章
3.主要这几点
1.每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint
2.在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display
3.CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer 通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)
4.layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer
5.两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以
(最重点)两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以
具体看这里
4. 三种
1._NSConcreteGlobalBlock 全局静态
2._NSConcreteStackBlock 保存在栈中,出函数作用域就销毁
3._NSConcreteMallocBlock 保存在堆中,retainCount == 0销毁
5.
在调用block前使用__weak typeof (self) weakSelf = self;即可(即用一个弱指针指向self,这样的话在block中调用完weakSelf这个弱指针就会自动释放)
当block涉及多线程中调用self时就使用 __strong __typeof(weakself)strongSelf = weakself;(即再用一个强指针指向weakself这个弱指针,防止在block调用过程中self被释放)
建议在block中都加上__strong __typeof(weakself)strongSelf = weakself; 不会有任何坏处
6.利用workspace,具体看这篇文章
7.Cocoa采用了引用计数(retain count)机制,当一个对象的retain count=0时,在Mrc(即非arc)中时需要手动添加 [xxx release] ; 这样一句代码释放对象,但arc中这个系统已经默认帮你加上了,只要retain count=0就自动调用,当然过程还要复杂点,具体体看这篇文章
8. 四种(当时答了三种orz)
1.Pthreads
2.NSThread
3.GCD
4.NSOperation & NSOperationQueue
关于gcd的话我当时大概讲了一下队列同步异步这些,当时也讲得并不完整,毕竟有些东西紧张起来还是忘了…………
具体的话看这里
虽然这次面试并不成功,但至少吸取了点经验吧~
另外…………二本的我求一份ios或unity的实习orz……谢谢orz
网友评论