摘要:iOS开发系列的文章,内容循序渐进,包含C语言、ObjC、iOS开发以及日后要写的游戏开发和Swift编程几部分内容。文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大家交流,新建一个iOS技术交流群,欢迎大家加入:64555322(已满) 132785059(已满) 阅读全文
posted @ 2014-09-21 22:17 KenshinCui 阅读(144469) 评论(73) 推荐(84) 编辑
摘要:说起iOS的OOM问题大家第一想到的应该更多的是内存泄漏(Memory Leak),因为无论是从早期的MRC还是2011年Apple推出的ARC内存泄漏问题一直是iOS开发者比较重视的问题,比如我们熟悉的 Instruments Leaks 分析工具,Xcode 8 推出的 Memory Graph 等都是官方提供的内存泄漏分析工具,除此之外还有类似于[FBRetainCycleDetector](https://github.com/facebook/FBRetainCycleDetector)的第三方工具。不过事实上内存泄漏仅仅是造成OOM问题的一个原因而已,实际开发过程中造成OOM的原因有很多,本文试图从实践的角度来分析造成OOM的诸多情况以及解决办法。 阅读全文
posted @ 2020-06-17 17:28 KenshinCui 阅读(341) 评论(0) 推荐(0) 编辑
摘要:相信稍微接触过iOS图片相关操作的同学都遇到过图片旋转的问题,另外使用[AVFoundation](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/capturing_still_and_live_photos)进行拍照的话就会遇到前后摄像头切换[mirror](https://developer.apple.com/documentation/avfoundation/avcaptureconnection/1389172-isvideomirrored)问题就让人更摸不着头脑了。今天就简单和大家聊一下iOS的图片方向问题。 阅读全文
posted @ 2020-02-03 16:17 KenshinCui 阅读(402) 评论(0) 推荐(0) 编辑
摘要:滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现。当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如无法实现偏光镜和紫外线滤色镜的效果。今天简单介绍一下iOS滤镜开发中的正确姿势,让刚刚接触滤镜开发的朋友少走弯路。 阅读全文
posted @ 2020-01-12 02:35 KenshinCui 阅读(532) 评论(0) 推荐(0) 编辑
摘要:我们都知道Xcode默认的调试器是LLDB(在此之前使用的是GDB),但是关于LLDB的debug技巧并非所有人都比较清楚,可能所有人都知道p或者po命令打印一些变量。但是实际的情况时这些还远远不够。比如说有没有一些情况下crash无法定位到有用信息,直接出现exc_bad_access,有没有遇到过每次调试一个UI就要重新run一次Xcode(话说编译时间真的影响一个UI开发者的效率)。 阅读全文
posted @ 2019-11-28 20:30 KenshinCui 阅读(1463) 评论(2) 推荐(2) 编辑
摘要:概述PhotoKit应该是iOS 8 开始引入为了替代之前ALAssetsLibrary的相册资源访问的标准库,后者在iOS 9开始被弃用。当然相对于ALAssetsLibrary其扩展性更高,api使用起来也更加的强大,但这并非今天讨论的重点,这里主要讨论PhotoKit使用的一些技巧和容易踩的坑。PHImageManager or Custom访问相册资源常用的操作还是获取资源,比如获取一张相... 阅读全文
posted @ 2019-11-17 16:03 KenshinCui 阅读(312) 评论(0) 推荐(0) 编辑
摘要:概述所谓智能裁剪其实就是按照指定尺寸裁剪或显示出包含图片核心特征的区域,目前很多智能裁剪都是在服务器端做的,在客户端需要访问时直接裁剪放到Redis或者提前裁剪好以备访问。但是找了一圈直接在iOS客户端进行裁剪的库还不多,或者使用成本比较高,不能即拿即用。但是有时候客户端可能并非直接从服务器端获取数据而是读取相册数据,不可能先把图片存放到服务器端裁剪然后再拿来用,考虑到这种场景也不再少数,因此就... 阅读全文
posted @ 2018-12-12 15:08 KenshinCui 阅读(1765) 评论(2) 推荐(0) 编辑
摘要:缓存组件应该说是每个客户端程序必备的核心组件,试想对于每个界面的访问都必须重新请求势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询数据库检查缓存是否存在;另外还有些开发者会选择以归档文件的方式保存缓存数据,每次请求资源之前检查相应的缓存文件。事实上iOS系统自身就提供了一套缓存机制,本文将结合URL Loading System介绍一下如何利用系统自身缓存设计来实现一套缓存机制,使用这套缓存设计你无需自己编写内存和磁盘存储,无需自行检查缓存过期策略就能轻松实现数据缓存。 阅读全文
posted @ 2017-06-05 14:37 KenshinCui 阅读(9701) 评论(5) 推荐(14) 编辑
摘要:RunLoop作为iOS中一个基础组件和线程有着千丝万缕的关系,同时也是很多常见技术的幕后功臣。尽管在平时多数开发者很少直接使用RunLoop,但是理解RunLoop可以帮助开发者更好的利用多线程编程模型,同时也可以帮助开发者解答日常开发中的一些疑惑。本文将从RunLoop源码着手,结合RunLoop的实际应用来逐步解开它的神秘面纱。 阅读全文
posted @ 2017-05-08 10:35 KenshinCui 阅读(36484) 评论(20) 推荐(19) 编辑
摘要:在iOS系统中,如果控制器是以push方式进行管理的话,那么事实上多个控制器是共享的同一个导航栏。当然iOS系统的设计无可厚非,但是国内的应用经常会遇到很多个性的设计,就比如说A push到 B,A可能有导航栏,但是B控制器要求导航栏是透明的,这样一来A和B由于共用同一个导航栏就会让整个切换操作不易管理,何况从iOS 7开始不仅仅是点击返回按钮瞬间返回A那么简单,还要支持通过手势操作从B缓慢返回到A的导航栏渐变效果。本文就简单看一下如何能够更加合理的设计导航栏切换的效果以避免开发中由于导航栏管理不善而造成管理混乱的状况。 阅读全文
posted @ 2017-05-07 16:09 KenshinCui 阅读(6159) 评论(14) 推荐(16) 编辑
摘要:UITableView是iOS开发中使用频率最高的UI控件,在前面的[文章](http://www.cnblogs.com/kenshincui/p/3931948.html)中对于UITableView的具体用法有详细的描述,今天主要看一些UITableView开发中的常见一些坑,这些坑或许不深,但是如果开发中注意不到的话往往比较浪费时间。 阅读全文
posted @ 2017-04-14 14:50 KenshinCui 阅读(5358) 评论(5) 推荐(10) 编辑