抖音实习周记(三)

status
category
date
summary
slug
icon
tags
password

知识清单

  • 常见图片格式介绍
  • iOS内存管理
  • iOS数据持久化

总结

这周完成了无用图片的检测和图片压缩的实验,顺带着去了解了一下各种图片格式的区别,以及压缩原理。其他的时间学习了iOS的内存管理策略和数据持久化方案,但是准备写总结的时候发现根本无从下笔,还是学习的不够深入不够全面。
写完以上内容之后,突然发现一个新的bug直接导致crash,原因是在一个控件中修改了delegate调用的方法,解决了一个委托者的问题,但是另一个委托者没有实现该方法,导致崩溃。抓紧时间回退之后开始思考调整策略,本来我开始质疑架构本身的合理性:两个委托者需要同一套逻辑来实现某功能,但是视图控件中并没有做实现,需要在委托者中具体实现,导致代码重复过多,并且编译器也无法很好地检查代理方法是否实现,但是在mentor的开导下有了新的思考。
抽象分为视图的抽象和功能的抽象,这里的使用场景是两个ViewController都使用了一个控件,分别实现它的代理方法,虽然现在两个控件的功能比较相似,但不能因此牺牲扩展性。例如,如果将功能也直接集成到控件内部,将来第三个ViewController需要使用该控件的视图,而实现的功能有所差异的时候,就会出现问题了。仔细想想,苹果官方的设计思想也和这类似,例如UITableView内部并没有对点击事件做很多相应逻辑,而是暴露了点击某个Item时的代理方法,让开发者根据自己的需求来实现功能。
这件事给了我一些启发,首先是代码的鲁棒性,在实现代理方法的时候,尽量利用respondsToSelector做一个检查,保证万无一失。更重要的是对于架构设计的思考,代码的集成和抽象需要按照视图和功能区分开来,例如一个控件应当尽量减少功能的复杂性,而通过delegate暴露功能的实现。另外在对功能做抽象的时候,不仅要考虑代码的复用性,还要考虑的可扩展性,不能为了眼前的便利而牺牲将来的灵活性。
Loading...

© 刘口子 2018-2025