美文网首页
iOS面试更新

iOS面试更新

作者: 风动青春 | 来源:发表于2018-06-28 17:14 被阅读0次

    一、UIView和CALayer的区别

            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 不可以

    二、weak指针的理解

            weak型的指针变量仍然可以指向一个对象,但不属于对象的拥有者。

            weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此父亲是儿子的所有者;但为了阻止所有权循环,儿子需要使用weak指针指向父亲。典型例子是delegate模式,你的ViewController通过strong指针(self.view)拥有一个UITableView, UITableView的dataSource和delegate都是weak指针,指向你的ViewController

    三、如何令自己所写的对象具有拷贝功能?

            实现NSCoping协议。 NSCopying与 NSMutableCopying。

    四、循环引用的例子

            1、NSTimer  一方面,NSTimer经常会被作为某个类的成员变量,而NSTimer初始化时要指定self为target,容易造成循环引用。

            2、block  block在copy时都会对block内部用到的对象进行强引用(ARC)或者retainCount增1(非ARC)。在ARC与非ARC环境下对block使用不当都会引起循环引用问题,一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身,

            3、Delegate 要用assign修饰,strong和retain会导致循环引用

    五、NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的

    相关文章

      网友评论

          本文标题:iOS面试更新

          本文链接:https://www.haomeiwen.com/subject/pbcnyftx.html