- 博客(478)
- 资源 (52)
- 收藏
- 关注
原创 大神博客地址列表
阮一峰的网络日志 (涉及到的知识面比较广,里面有做程序员的感悟)TB&Boy(主要以iOS为主,讲的很深入)OneV’s Den的博客(一位在国外工作多年归来的大神,崇拜崇拜^_^)廖雪峰的博客 (朋友推荐的,暂时还没看完给评价哦)念茜的博客(iOS和安卓的都有主要是安全方面的)ider (这个博客里面的内容都是很高大上的哦)Imrazor(这个博客挺不错的,...
2016-04-26 11:12:19 1465
原创 Metal之旅启航
1,openGL严格只是一套协议,经过打印发现底层还是用metal来实现的,经过打印发现苹果封装了这样的一个类AppleMetalGLRenderer。2,openGL在一些早期的iPad上各种缓存的支持度有限,但是我们公司的应用主体设备很多就是早期的ipad。3,openGL的API已经被标记为废弃状态了,后续只能用Metal了。多重采样(MSAA)和超采样(SSAA)6,图像编辑,美化等等。Sampler 采样器。
2024-09-13 21:16:33 249
原创 iOS 本地图片扫描优化
我这里扫描的图片格式有png,jpeg,pdf,其中图片使用的扫描主要是常见图片使用方式整理,并编写相应的正则表达式进行扫描。2,对于较大的图片,按照一定的规则进行取样,并对取样后的内容获取md5值,并对获取的md5值进行比较,如果重复把比较图片路径输出。3,图片名字命名指定一个合适的规范,能够很大程度提高扫描的准确率,比如:图片名字命名不会和类名, 方法名等存在重名的情况。1,已经扫描到未使用的图片,不再参与后续重复图片的扫描。2,已经扫描到重复的图片,不再参与后续的重复图片扫描。
2024-09-11 21:46:05 322
原创 iOS长图生成的pdf性能优化记录
经过代码定位发现时pdf转成image对象的过程中由于是长图生成的pdf,这一页的pdf的size相当于正常pdfsize的30多页,转换的过程中context的fill的size也是正常pdf的30多倍。经过调研,尝试,发现对于同一页的pdf,可以通过调整context的fill的size来只把pdf中的部分内容转换成image对象,内存正常也不大。调整后的方案为:根据屏幕大小来决定一个pdf页面生成多少个image对象,有多少个image对象,一个section里就有多少个cell。
2024-01-21 22:18:12 682 1
原创 iOS 自动签名打包,并用脚本上传appstore
其中env.appId是从appStore中,app信息里查看获取,env.bundle_id是info.plist中的bundle identifier,APP_VERSION是info.plist的version,BUILD_NUMBER是info.plist文件中的BuildNumber。1)测试环境给测试,产品,或者其他业务人员打测试包时,经常存在需要添加设备,不得不重新生成描述文件,手动去更新打包机描述文件配置。2)证书,描述文件过期造成打包失败,需要重新生成描述文件,证书等。
2023-12-03 19:08:58 760 2
原创 记录一次内存泄漏排查历程
仔细思考了发现这个函数是C,C++的函数,在执行的时候会对traceHandler默认执行retain操作,但是这个traceHandler是OC对象,释放需要OC来执行release操作,,但是ARC下已经不能手动执行release操作了。打开instruments,按照内存泄漏的流程进行检测,反复进入,退出目标ViewController,检查instruments法相并没有定位到内存泄漏的代码,为了保险起见,又参考了网上的检测流程反复多次进行检测,结果都是一样没有定位到内存泄漏的具体代码。
2023-11-27 17:06:29 371
原创 JKPacket权威指南——联系我们
各位在使用JKPacket的过程中遇到问题或者阅读本书发现有错误之处可以通过下方邮箱联系到我。邮箱:zhangsande18@163.com。
2023-10-27 22:02:02 215
原创 JKPacket权威指南—— Lifecycle
3,通过demo了解简单的使用后可以看看JKPacket实战相关的内容,以及了解一下JKPacket的实现原理,那么将会事半功倍。如果JKPakcet已封装的类满足不了的需求场景,也可以基于JKPacket的协议,自己编写相关的子类进行拓展。1,需要储备一定的rxswift相关知识,如果能熟练使用rxswift,并对rxswift有深入了解,那使用JKPacket将会得心应手。1,了解基本的swift语法,如果还没有从OC转swift的开发者建议尽早转swift了。2,需要对KVO内部实现有一定的了解。
2023-10-27 21:56:04 356
原创 JKPacket权威指南——RXSwift
JKPacket本质是一个能感知组件生命周期的响应式编程框架,对于复杂的业务能很好的降低状态维护的成本,提高开发效率,减少bug的产生。对于rxswift了解不多但是愿意尝试rxswift的开发者来说也是很好的选择。当然了如果你不愿意使用rxswift,这个框架仍然能满足基本的响应式编程需求,只不过一些通过rxswift才能使用的一些便利场景,需要自己来实现。对于习惯使用OC中KVO的开发者来说,在swift中非OC类无法使用KVO进行属性监听,JKPacket作为替代方案也是一个不错的选择。
2023-10-27 12:21:51 164
原创 JKPacket权威指南——序言
JKPacket融合了RXSwift,因此在监听数据变化的时候,通过在onSubject这个回调内,可以充分基于RXSwift进行特殊处理,比如:指定监听的线程是否在主线程,debouce,throttle等大部分的RXSwift操作都能在这里进行设置。如果处于非活跃状态,该组件下触发的变化通知会处于pending状态,并保留最新的数据,等到组件状态重新变为活跃时,使用pending的最新数据重新触发一次变化通知。满足了某些业务场景下组件恢复到活跃状态时,需要回放非活跃状态接收的数据。
2023-10-27 10:19:28 151
原创 JKPacket权威指南——目录
5)livedata.observerForever()方法。6)viewModel+livedata实现跨组件通信。1)apple 开发者缺乏一套标准化的响应式编程框架。3)Lifecycle解耦service与组件。2)livedata与viewModel的关系。2)Lifecycle解耦页面与组件。3)livedata的基本使用方法。4)livedata的实现原理。1)Lifecycle的诞生。1)JKPacket的特点。1)什么是JKPacket。2)JKPacket诞生记。
2023-10-27 09:50:23 151
原创 JKChangeCapture swift 版本的捕捉属性变化的工具
在OC的时代里,大家捕捉属性的变化通常是通过KVO机制来实现的,KVO把所有的属性变化都放在了一个方法进行相应处理,并不友好,之前基于KVO的机制实现了一套属性变化工具JKKVOHelper,这里不就在过多介绍这个了,在swift的时代里,KVO机制已经不能满足我们的需求,我这边基于协议写了一套属性变化的监听工具。
2023-09-26 21:48:02 1066
原创 swift实现遍历嵌套字典并修改其中的值
如果要改变一个字典中的某个键值对应的数组中的元素数量(备注:这个键值的层级不确定),在OC中的话如果键值对应的数组是可变数组,那么我们只用通过递归遍历的形式获取这个可变数组的指针地址,然后增加或者删除元素即可。如果键值对应的数组是不可变数组,那么我们首先需要进行如下的操作。在swift中数组与字典都是值类型,在OC中数组与字典都是引用类型。在swift中数组或者字典增加一个新的元素,那么就会产生一个新的副本,但是在OC中可变数组或者可变字典并没有产生这样的变化。
2023-01-28 23:07:37 1208
原创 App Languages 批量导入管理Android(安卓)多语言文案
AppLanguages支持安卓的多语言文案管理啦,支持批量的检测,批量导入,批量删除,批量替换,批量导出。
2022-11-18 09:01:23 1789
原创 App Languages 批量导入管理flutter多语言文案
前段时间AppLanguages推出了支持iOS、Mac版的多语言文案导入功能,好几个小伙伴点赞,称其为“干货工具”,最近加班加点支持了flutter的多语言文案管理功能。
2022-11-15 23:31:29 1278 3
原创 App Languages 批量化导入管理iOS多语言文案
目前国内软件市场早已是一片血海, 很多公司将目标瞄准了国外,因此需要适配多语言,一般流程是开发者将需要翻译的文本填写到exel中发给翻译,翻译人员对照表格翻译好以后,开发者根据翻译提供的内容将多语言文本导入到工程中,有的公司开发的有自动化的脚本可以批量导入,有的公司只能手动导入,自己最近开发了一款软件 App languages可以实现可视化的形式批量导入多语言文案。
2022-11-07 10:01:37 1477 1
原创 iOS开发pod组件批量发布工具使用教程
由于历史原因,公司目前的pod组件已经有好几十个了,加上快速的迭代,每次发版以后大量组件需要发布都非常的痛苦,为了解决这个问题,开发了一个可视化的pod组件开发工具,将待发布的组件设置配置好以后,一键发布即可,组件都发布成功后可以看到发布的结果,会有弹框提示,也可以查看发布失败的原因。1,使用前需要确认待发布的组件的代 码仓库都已经clone到了本地2,为~./ cocoapods 文件夹设置一个替身,方便 后期通过替身选择索引仓库打开软件既可以看到这儿页面,点击添加按钮选择组件的文件夹(备注:.p
2022-06-18 15:11:24 1302
原创 iOS开发crash信息符号表解析
在实际的开发过程中,我们的app如果出现crash情况,一般会通过bugly或者firebase等工具,上报到控制台,方便我们进行分析。但是有的时候也会存在一些crash信息没有上报,我们开发无法根据测试反馈的流程复现crash的情况。针对这种情况,只能让测试把手机打开一些功能,来方便我们定位问题。具体步骤如下:共享iphone分析开关打开,这样有crash信息就会记录下来如果有crash信息就有记录下来,可以点击【分析数据】这一行进去查看,具体如下:可以选择某一个信息,进入然后分享出来。
2022-04-16 17:38:42 4118
原创 Flutter折叠展开列表的使用
flutter中官方其实已经封装好了折叠展开列表:ExpansionPanel,但是官方的可定制性太差,我今天主要说下如何简单实现一个自己的折叠展开列表。状态控制 折叠展开列表,每一个父列表项都应该有一个状态记录,如果是关闭入状态,点击后就展开子列表,如果父列表是展开状态,那么点击就会将子列表关闭。数据刷新 折叠展开的过程其实就是状态变化的过程,逻辑层面根据这个状态执行不同的逻辑流,返回不同的数据源,然后刷新来实现折叠展开的效果。具体源码如下:isOpen是个状态变量,点击的时候只用改
2022-02-05 10:22:08 5039
原创 Flutter与原生混合开发
在说flutter与原生的混合开发之前,先和初学flutter的小伙伴提个建议,建议大家刚开始的时候先在纯flutter的项目上练习flutter的相关技术,等练习的差不多了, 再练习flutter与原生的交互。主要原因是:与原生交互的时候会有很多环境的问题,比较折磨人。容易让人产生畏难情绪。 由于国内flutter做的比较多的一般是原生做安卓的小伙伴,而且市面上的书籍作者也是做安卓出身,书中的demo也是安卓的例子,安卓这一块我就不再多说了,重点说说flutter与iOS进行交互。集成到项目
2022-02-04 17:48:35 5016
原创 求平方根,要求精度到小数点后10位
这是一个算法题,之所以单独整理下,是因为这个算法题让我对算法有了灵感。仿佛打开了一扇门。计算机语言转换 根据题目,我们可以将题目转换成计算机语言如下:求一个数的平方根,这个平方根k的取值范围在0~n之间,同时小数点后保持10位的精度我们最后的精度为0.0000000001,那么k必须同时满足k *k <=n,(k+0.0000000001) *(k+0.0000000001)> n。解题思路 根据上面的条件,我们首先会发现k的取值在0~n之间,0 ~n之间的数是从小到排列的,我们
2022-01-13 09:59:28 3559
原创 Flutter模型与json的相互转换
最近遇到了需要将模型信息转换为json文件,并保存在本地,后续会根据json文件转换成对应的模型。在实践的过程中踩到了一些坑点下面一一和大家分享。颜色色值不要使用16进制整型存储 flutter中颜色色值的表示使用16进制的整型数字,但是将16进制的整型数字存储到json的时候会被自动转换成10进制的数字,在后续阶段json转模型会比较麻烦。这里和大家分享一个第三方库hexcolor ,直接使用16进制字符串来初始化颜色Color。因此我们在将颜色色值存储到json的时候,可以将16进制的字符
2022-01-11 23:04:57 3861
原创 Flutter键盘弹出造成布局异常解决
在使用flutter开发时,经常会遇到输入框弹起的时候,debug环境下会提示布局异常。下面我们分两种情况进行讨论分析输入框在可滚动widget上输入框如果在滚动的widget上时,键盘弹起,滚动的widget会自动滚动,不存在这个布局异常的问题,如果出现了这种情况,可以排查下Scaffold的resizeToAvoidBottomInset属性设置为false,这个默认是true.输入框在不可滚动widget上这种情况不要把输入框距离底部的高度写死,而是加上键盘的动态高度。MediaQuery
2022-01-06 09:36:41 4857
原创 跨平台开发最终选择了Flutter
一直以来一直希望自己具备多端开发能力,最终选择了flutter。下面简单说说作为一个iOS从业者选择flutter的心路历程。Hybrid混合开发 这个是最早接触,也是了解程度最深的一个技术,主要用框架有Cordova(前身PhoneGap),JSWebBridge这些。对于这些框架的原理也有深刻的认识,但是这样的跨平台开发,仍然受限于webView,而且作为只具备单端开发能力的人员来讲,仍然需要很大程度关注其他端的技术,优势是可以将之前web的内容平滑的迁移。对于之前web应用来说很是友好。性能
2021-11-28 18:43:13 2696
原创 iOS开发如何限制NSNotification的作用范围
在实际的开发中NSNotification能够很好地解耦代码,跨层传输数据等。但是由于是全局生效的。因此有时候我们不想作用范围那么广,只想局限在某个范围内进行通知的发送与接收。最近弄了一个方案,分享给大家。我这边主要分为两部分进行处理在某个类的范围内生效 在实际的开发过程中,有时候通知的范围只在与某个类的范围内生效,也即只要是这个类创建的对象内都会生效,在app运行期间可能同时存在一个类的多个对象。针对这种情况,我这边将通知的发送,接收和类名进行了关联。这样能够保证通知只在该类相关的范围内生效。
2021-09-19 08:25:57 267
原创 iOS开发中NSNotification的便利使用
NSNotification的使用有几个痛点:1)无法自动释放监听;2)重复添加监听没有提示;3)使用不够便利。最近在推动项目中使用swift,将原来的OC代码写了一个swift版本分享给大家。实现原理OC版本主要通过NSObject的分类,动态绑定一个数组,每次添加通知的监听,都会创建一个proxy对象,将这个proxy对象添加到刚才动态添加的数组中。这个proxy是真正的通知的监听者。并且响应处理通知的block,释放的时候会移除监听。能够实现proxy对象释放时,自动移除监听。一个对象被释放
2021-09-16 07:48:04 351
原创 谈一谈练手app
工作以来总共创建过三个练手app,一路实践下来感觉收获挺大,把自己的收获分享给大家。为什么程序员要有自己的练手app(练手demo)如何安排自己的时间练手app应该做哪些功能自己通过练手app学到了哪些知识自己的练手app下载地址...
2021-09-14 17:30:09 309
原创 iOS 蓝牙开发实现文件传输
这是一篇旧文,三年前就写过了,一直没有时间分享出来,最近简单整理了下,希望能帮到有需要的人。 由于我这里没有相关的蓝牙设备,主要用了两个手机,一个作为主设备,一个做为从设备。另外进行蓝牙开发有一个调试利器。主设备和从设备我分别创建了一个管理类。主设备主要进行的操作如下:开始扫描设备停止扫描设备连接设备断开连接设备发送数据具体源码如下:#import <Foundation/Foundation.h>#import <CoreBluetooth/CoreBl
2021-09-04 11:03:09 2534
转载 知名RSS订阅
博客地址RSS地址OneV’s Denhttp://onevcat.com/atom.xml破船之家http://beyondvincent.com/atom.xmlNSHipsterhttp://nshipster.cn/feed.xmlLimboy 无网不剩http://feeds.feedburner.com/lzyy唐巧的技术博客http://blog.devtang.com/atom.xmlLex iOS noteshttp://ios...
2021-08-27 22:18:54 1097
原创 iOS开发沙盒管理工具swift版
之前组件化开发的时候,有写过一个OC版本的沙盒文件管理工具,最近将代码整理优化了一个swift版本,整理如下:import Foundationextension String { var `extension`:String { if let index = self.lastIndex(of: ".") { return String(self[index...]) } else { return ""
2021-08-27 21:38:54 673
原创 iOS 性能监控方案设计(一)
最近在搞app的性能监控。主要从启动耗时,首屏耗时,操作耗时的几个指标进行监控启动耗时 启动耗时主要分为冷启动,热启动。 其中冷启动又分为首次启动,非首次启动。冷启动:从main函数开始,到第一个用户自定义的页面出现为止(备注:这个过程中要区分一下是否是首次启动)热启动:从app即将进入前台到,app进入前台的这个过程。涉及到的函数。具体下:- (void)applicationWillEnterForeground:(UIApplication *)application{ //
2021-08-22 08:17:22 773
原创 谈一谈iOS开发后台下载
由于iOS系统对于后台执行任务管控比较严格,如果app没有任务继续执行,那么app在进入后台一段时间后会被系统杀死。如果下载大文件的话,需要考虑如何在app进入后台后继续下载。app保活策略 app保活是指app进入后台后,通过静默的重复执行某个后台允许的任务,保证App不被系统杀死。例如:后台播放没有声音的音频。app保活应用比较广泛,不仅仅可以实现后台下载大文件。其他的应用场景:比如用户通过一定路径进入某个比较重要的页面,但这个页面操作可能需要切换app等,为了让用户下载进入app的时候仍然
2021-07-12 22:57:13 1613 4
原创 iOS开发通过微信学习WCDB(四)
最近打算将封装一个基于wcdb操作的数据库私有库,在封装使用的过程中遇到了一些问题,将问题整理了一下,分享给大家。私有pod库依赖于WCDB 造成lint失败 最开始遇到这个问题的时没有眉目,后来看到打包方式都是静态库,后来想了一下,觉得是不是不能动态库,改成动态库试试,我在podspec文件中填了类配置如下 s.static_framework = true关于这个字段的详细解释,大家可以看下cocoapods的官网。上面有详细的解释Use of ‘@import’ when C+
2021-07-02 18:48:30 688
原创 JKNetworking完整文档
前言这个网络请求框架主要是参考了YTKNetwork的实现思路,结合自己工程进行了进一步的封装,这个框架比较适合大型业务比较复杂的app。基本组成具体功能基本功能能够正常的进行GET,POST,PUT,DELETE,HEAD,PATCT 等网络请求,能够实现文件的上传下载等功能。这个大多数网络请求都能够实现。高级功能1)支持链式网络请求所谓链式网络请求就是一个请求完了,接着执行下一个网络请求。一个网络请求开始的前提必须是上一个网络请求正常结束。允许提前结束链式网络请求2)支持类组队列的网
2021-05-27 07:55:13 415
原创 iOS开发性能优化大纲
前言 今年团队工作计划的一部分是性能优化,主要会涉及到内存优化,启动优化,渲染优化,卡顿优化,耗电量,网络流量优化,弱网优化等。之前写过一篇内存优化策略的文章,大家感兴趣的话,可以看下《iOS性能优化之内存篇》。目的 写这篇性能优化大纲,主要是方便大家结合自己的项目,根据大纲找出适合自己实际情况的待优化项。有目的、有步骤的进行优化。在进行性能优化前,最重要的一点需要强调一下:所有的优化要以满足业务需求为前提。优化大纲1,尽可能的减少app运行期间执行的任务数量 App运行期间执行一个个
2021-04-29 00:00:06 396
原创 团队中技术同质化的反思
最近一直在思考团队技术同质化的问题,今天整理了下自己的思路。和大家分享一下自己的想法。如果有准确或者偏颇的地方,还请大家多多批评指正。什么是团队技术同质化 我个人认为:团队技术同质化,是一个团队成员长久没有新鲜血液补充,同时团队成员被工作绑定,缺乏自己独处、思考的时间。造成团队技术成员技术选型差不多,思想,认知等趋同,相互交流,难以碰撞出好的想法。最终团队整体缺乏激情。如何避免团队技术同质化 个人觉得这是一个稳定型团队迟早要面临的问题。1)及时补充新鲜血液(常态化的人员更换机制)2)合理
2021-03-09 22:58:12 844 1
OCHamcrestIOS
2015-09-29
UIWebView与 javascript的交互三
2015-04-23
UIWebView与 javascript的交互二
2015-04-22
JSPatchFixDemo
2017-02-28
Jack3DScrollDemo
2015-12-26
NPCgoPockerFrameWork_NoBug
2015-12-25
JackScrollPlayerDemo1
2015-12-25
JackScrollPlayerDemo
2015-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人