akerdi / WorkFace

面试经历

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2018/05/25 面试

akerdi opened this issue · comments

commented

昨天面试总结几点:

  1. @autoreleasepool 在for 循环中是
NSUInteger count = 10000000000;
for (int i =0; i < count; i++) {
    @autoreleasepool (
        UIImage *image = [UIImage imageWithNamed:@"xx"];
    )
}

由于imageWithNamed 方式会将Image 拷贝到内存中,
在数量比较大的时候需要让他去释放。
还有一种是

@autoreleasepool (
    for (xxx) {

    }
)

对比度与上面的正确方式不是特别特别大,不过一定要使用正确姿势
2. tableview 快速滑动优化
这就会讲到cell 里面比如:离屏渲染、数据缓存、富文本缓存、计算缓存等。
同时业内就是使用ASDK,其原理、做法(这一块我也只能是看文章,答不好,稍微说了说,说不到点,还是不说了。迷惑点,主要是两点:1. dataController 是怎么样缓存的;2. 怎么样异步绘图)
3. block 是什么原理
__block/__weak/__strong
4. 服务器开发
5. React
6. 内存释放
内存主要的就是图片缓存,视频基本都是OpenGL 要显示时的缓存帧。

比如下载下来图片,先进行于imageView 大小一致,CGBitMapCreateImage,quality 使用最优。
在经常使用列表,采用一个SDWebImage manager,比如图片比较少用到,采用另一个manager
这样做的好处是分开几种显示类型。各自有自己的阈值。同时再比如receiveMemoryWarning 的时候释放、几分钟之后进行判别释放、didEnterBackground 时释放、阈值等手段。
7. SDWebImage
SDWebImage 缓存流程,图片加载过程,其中的内存,快速滑动100个cell 时,是不是都在缓存;图片下载下来之后做了什么。
我是对比了我抄写的PinCache 对比,以及项目重构setImageWithURL 自己的流程是怎么做的的思路。