2023笔记

2023笔记

  • GCD同步没有开启新线程的能力

  • dispatch_sync() 造成死锁的条件是:dispatch_sync的当前执行队列与提交block执行的目标队列相同时将造成死锁。

  • 使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)

  • 并发队列可以一下子处理多个任务,但是并不是一定会开新线程,并发队列不需要向串行队列一样一个一个处理任务

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVJcEhgw-1690702044184)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled.png)]

  • 各种组合

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cp7Rrb4T-1690702044185)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%201.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQLOwrQN-1690702044185)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%202.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p00KvIO8-1690702044185)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%203.png)]

  • dispatch_after 方法并不是在指定时间之后才开始执行处理,而是在指定时间之后将任务追加到主队列中

  • Flutter感觉语法和SwiftUI差不多,和Reactnative区别在于,React Native最后还是使用原生控件去加载视图,比如UILabel,而Flutter是有自己的一套渲染机制,不用映射到原生控件,效率高。有热重载,毫秒级别。多平台支持web, macos, iOS, Android等。

  • 新闻和评论界面实现方式,优化

    实现方式有三种

    • 下图是scrollViewInset和TableViewHeader方式

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnSkA6sL-1690702044186)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%204.png)]

    • 另外是使用scrollview方式

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRCpeZ6k-1690702044186)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%205.png)]

    优化有以下几点

    1. WKWebView复用
    2. WebView中图片视频GIF图等使用原生控件加载,这样会减轻WebView加载压力,提高速度
    3. WebView中非文字的控件全部用原生控件加载,并且要复用,提高加载速度
  • 类似微信朋友圈视图的布局和优化思路

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTOsdASm-1690702044187)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%206.png)]

  • OC 消息传递机制

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYVsW4Mr-1690702044187)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%207.png)]

  • weak的原理

    weak不会引用计数增加1的原理是,runtime维护了一个弱引用表,有weak的话就往里面增加一个hash键值对,当对象dealloc的时候,会把弱引用表清空,指针指向nil

  • 讲讲runloop

    个人理解,是一个循环,保证线程能够一直运行不退出,也会休眠,因为休眠后不可能自己重新恢复激活,所以需要有其他对象触发激活。

    NSTimer是放到runloop中的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7WtTHIp-1690702044187)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%208.png)]

  • GCD如何实现NSOperationQueue的特性

    最大并发数:用信号量控制最大数,如果并发数设置为4,那信号量为3,执行完了发送信号量不然就等着。
    线程依赖:使用调度组dispatch_group_create和GCD中的栅栏和wait也能实现同样的效果。

  • 数据持久化存储方案有哪些?

    1. plist 文件(属性列表)
    2. UserDefaults(偏好设置)
    3. NSKeyedArchiver(归档)
    4. keychain
    5. SQLite
    6. CoreData
  • 组件化的理解

    首先是学习的阿里的BeeHive框架,组件化的运用场景是项目比较大,各个模块比较多,为了解除各个模块之间的耦合,使用入口和实现方式,如果依赖其他模块,但是还没开发好,可以只依赖这个模块的入口,入口代码通过category增加Mediator分发者的方法,Mediator通过performSelector + NSInvocation动态调用方法,如果没有实现方法,则返回nil。这样可以让每个模块开发不会受其他模块的影响,耦合程度降低。

  • tableview优化方案

    1. 重用机制
    2. 使用tableViewCell的估算高度,这样会减少调用heightForCell的频率
    3. 提前缓存行高
    4. 减少cell视图的复杂度
    5. 减少离屏渲染
  • 检测卡顿的方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a5ukOZE4-1690702044187)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%209.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I1N2W3Js-1690702044188)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%2010.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2QYCEy8-1690702044188)(2023%E7%AC%94%E8%AE%B0%2065b04df55b854816ba2946b5184a64b5/Untitled%2011.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值