本章介绍了iOS绘图的基础:上下文。您已经了解了如何创建上下文,知道了可用的不同上下文,并发现如何检索内容以用于生成图像和PDF文件。在iOS中,上下文提供了一系列细微差别的状态控制。在你读完本章之前,这里有几点要思考:
- 对于任何绘图要求,通常有许多解决方案可以让你得到相同的结果。你倾向于使用Core Graphics函数或UIKit类的习惯可能会影响你对API的选择,但是你必须或者应该使用哪种方式绘图通常是没有正确答案的。根据你的开发需要决定使用哪种更合适。
- UIKit类一直在发展。随着每一代的iOS的更新发布,它们提供越来越多的资源,让你跳过Quartz而直接使用UIKit。UIKit API具有简单,简约和易于检查的优点。大多数iOS开发人员会发现这些优点造就了非常多的开发者主要使用UIKit的情况。苹果通常建议开发人员使用最高级别的API。当您需要较高级别版本的API不提供的功能时,请使用较低级别的API。你可以在老式API中做许多在UIKit中不能实现的事情,例如计算阴影的绘制或使用输出颜色空间。
- 合理适当地使用Core Foundation风格的C的API与手动内存管理仍然是一个有益的技能。了解
Ref
风格对象的工作原理,知道何时以及如何释放这些对象在现阶段仍然是有必要的。了解如何使用ARC样式的桥接在当前内存管理模式与Core Foundation系统的内存管理模式之间来回转换。你会很高兴你投入学习的这些时间,因为你获得了更大的灵活性。记住这个经验法则:如果函数的名称带有Copy
或Create
字样,则必须手动释放项目。如果说是Get
,则不需要。并且,在可能的情况下,始终查找与Create
函数具有相同前缀的释放函数。例如,如果创建一个颜色空间,使用CGColorSpaceRelease()
释放来平衡内存。 - Quartz和UIKit绘图都是线程安全的。Apple技术问答1637指出,从iOS 4.0开始,“在UIKit中绘制到图形上下文是线程安全的。这包括访问和操作当前图形堆栈,绘制图像和字符串,以及使用来自辅助线程的颜色和字体对象。”
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。