首页 > 字节跳动校招iOS工程师面筋分享,超详细!!
头像
牛客581651807号
发布于 2020-06-25 22:21
+ 关注

字节跳动校招iOS工程师面筋分享,超详细!!

字节跳动


  • 问:-(CGSize)intrinsicContentSize:是干什么用的?


       答:固有大小。顾名思义,在AutoLayout中,它作为UIView的属性(不是语法上的属性),意思就是说我知道自己的大小,如果你没有为我指定大小,我就按照这个大小来。


  • 问: 编写一个循环引用的代码


       答:循环引用就是指双方互相强引用对方,设置代理的时候,delegate要设置成assign或者weak,千万不能用成strong,如果用strong就是循环引用。


  • 问:assign和weak有什么区别?


       答:assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针!weak和assign都是引用计算不变,两个的差别在  于,weak用于object type,就是指针类型,而assign用于简单的数据类型,如int BOOL等。assign看起来跟weak一样,其实不能混用的,assign的变量在释放后并不设置为nil(和weak不同),当你再去引用时候就会发生错误,崩溃,EXC_BAD_ACCESS.

  • 问:layer和view的关系

       答:View负责处理事务,layer用于显示. UIView主要是对显示内容的管理而CALayer主要侧重显示内容的绘制 每个UIView内部都有一个CALayer在背后提供内容的绘制和显示,并且UIView的尺寸样式都由内部的Layer所提供。两者都有树状层级结构,layer内部有SubLayers,View内部有SubViews.但是Layer比View多了个AnchorPoint在View显示的时候,UIView做为Layer的CALayerDelegate,View的显示内容由内部的CALayer的display CALayer是默认修改属性支持隐式动画的,在给UIView的Layer做动画的时候,View作为Layer的代理,Layer通过actionForLayer:forKey:向View请求相应的action(动画行为) layer内部维护着三分layer tree,分别是presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做iOS动画的时候,我们修改动画的属性,在动画的其实是Layer的presentLayer的属性值,而最终展示在界面上的其实是提供View的modelLayer两者最明显的区别是View可以接受并处理事件,而Layer不可以

  • 问: 拖线的时候为什么要设置成weak,设置成strong行不行?

       答:举例来说,UIViewController的view属性是strong,因为controller要直接拥有view。而添加到view上的subviews,作为IBOutlet只需要设置为weak就可以了,因为他们不是controller直接拥有的。直接拥有subviews的是controller的view,ARC会帮助管理内存。总结归纳为:当控件的父view销毁时,如果你还想继续拥有这个控件,就用srtong;如果想保证控件和父view拥有相同的生命周期,就用weak。当然在大多数情况下用两个都是可以的,我个人习惯还是用weak

更多模拟面试

全部评论

(0) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐