ios
killer1989
这个作者很懒,什么都没留下…
展开
-
(转载)macOS 内核之内存占用信息
来源https://justinyan.me/post/3982一、iOS 获取自身 App 内存占用照例先从 iOS 开始。iOS 由于系统限制,App 层面只能获取自身的内存信息,无法获取其他 App 的内存信息。所以我们先看如何获取自己 App 的内存信息。系统接口使用很简单,参考滴滴开源的 DoraemonKit 的实现如下:+ (NSInteger)useMemoryForApp{ task_vm_info_data_t vmInfo; mach_msg_type转载 2020-09-19 12:38:25 · 1102 阅读 · 0 评论 -
iOS程序执行顺序和UIViewController 的生命周期(整理)
iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期UIView的生命周期言叶之庭.jpeg一. iOS程序的启动执行顺序程序启动顺序图iOS启动原理图.png具体执行流程 程序入口 进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 .转载 2020-08-29 17:28:24 · 264 阅读 · 0 评论 -
单例dispatch_once造成的死锁
好久没有更新了,这一次遇到一个单例模式造成的死锁,比较有代表性,这里做一个总结,分享给大家起初,我们发现程序偶现死锁的问题,按照解决deadlock的一般思路是找到问题发生时,访问同一资源或者数据结构的可疑线程OC和C有很多的基础类型都是线程不安全的,比如NSDictionary、array等,结果一无所获????看来问题没有这么简单????那就找,问题发生时,访问同一个方法的可疑线程经过几次的信息获取,合并同类项,终于发现了这几个死锁的共同特性(),即总会同时出现以下两原创 2020-08-29 14:47:35 · 1438 阅读 · 0 评论 -
VC耗时监控的参考资料
VC页面加载监控主要分为页面交互时间和页面渲染时间目前页面交互时间比较统一在iOS即从viewDidLoad到viewDidDisappear的时间,但页面渲染时间由于和业务强关联,很难找到一个通用的方案,这里把这几天相关的资料记录下来,供大家参考关于页面交互时间的参考文献一种基于KVO的页面加载,渲染耗时监控方法(这个是算法的原型,后面几篇文章都是基于此做的)https://www.colabug.com/2017/1127/1953419/巧妙利用KVO实现精准的VC耗时检测(这篇对原创 2020-08-19 15:41:45 · 883 阅读 · 0 评论 -
_dyld_register_func_for_add_image用法
注册映像加载和卸载的回调通知函数void_dyld_register_func_for_add_image(void(*func)(conststructmach_header*mh,intptr_tvmaddr_slide))void_dyld_register_func_for_remove_image(void(*func)(conststructmach_header*mh,intptr_tvmaddr_slide))如果你通过函数_dyld_register_...转载 2020-07-31 14:14:31 · 2819 阅读 · 0 评论 -
std的list, vector, map, set区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。另外对于新添加的元素,Vector有一套算法,而List可以任意加入。Map,Set属于标转载 2020-07-31 14:13:07 · 806 阅读 · 0 评论 -
跟iOS UI的捉迷藏,真的能够获取到self.presentingViewController
近期,在做一个有趣的实验,研究presentViewController和dismissViewController的对应关系,这里发现了一个有趣的现象,通常情况下,两者配对使用,如果连续两次presentViewController会出现一个warning:同时第二个会有很大概率加载失败(如何让载成功的例子后面会提到)两次dismissViewController则会出现:不要纠结错误的信息,总之是不对的配对使用是一个很好的习惯,也是保持布局稳定,这里有个知识点,dismissViewCo原创 2020-07-25 17:33:48 · 724 阅读 · 0 评论 -
iOS快速连续的push和pop 同一个ViewController时,系统到底在干啥
最近对PUSH和POP VC比较着迷,想弄清其中的机制是什么做个几个实验,供大家参考首先,测试代码如下,在一个方法里,进行多次连续push和pop操作,self.residentVC也是原生的UIViewController,这里主要是构造多样的VC这里有3个push,一个pop,全都关闭了动画我们通过对系统的pop和push方法进行了HOOK,通过log个可以看出对应的调用顺序,比如上面代码打印出log如下:通过log我们看到,navigationController逐个pus原创 2020-07-20 22:34:15 · 1416 阅读 · 0 评论 -
事出反常必有问题——记一次反常的“内存泄漏检测”问题
大家好,近期围绕一个检测内存泄漏的BUG折腾了三天,最后发现原因后十分郁闷,这里跟大家分享下,希望能够给大家帮助。众所周知,内存泄漏时APP的常见问题,在iOS系统中,APP的运行内存过大会导致系统告警,如果不及时清理则会被系统Kill掉——即我们所说的OOM(关于OOM的内容可以参考https://blog.csdn.net/killer1989/article/details/107003287),所以一个良好的APP是要避免出现内存问题。内存泄漏,广义上有很多,比如内存常驻、内存快速飙升、无主原创 2020-07-14 02:34:11 · 389 阅读 · 0 评论 -
WWDC20中iOS的改变
WWDC20中,绝大部份同学都会把注意力放在了iOS的布局改变和自研芯片上,这方面的文章也比较多,但作为一名开发者,更多的聚焦在iOS官方语言和官方库上来,这里仅找出几个更新比较大的点给大家分享。1.UICollectionViewWWDC19开始,UICollectionView相比之前简单的DataSource、Delegate的形式多了一种新写法,通过DiffableDataSource支持了局部刷新、cell的方便增删改等;通过UICollectionViewCompositionalLay原创 2020-07-09 15:33:02 · 491 阅读 · 0 评论 -
跟iOS UI的捉迷藏(如何获取用户点击行为的控件title)
近期,接到一个需求,需要获取用户点击行为的操作路径,除了点击的坐标,classname等常用数据外,还需要控件的title,这样就可以更加直观的了解到用户的操作行为。乍一听,熟悉Android的同学会说,View的onClick事件监听就好了,然而,iOS与Android并不相同,一方面,iOS没有统一的获取title的方式,另一方面,不同UI控件title的位置不尽相同,所以,要想获取常用控件的的title,着实需要对控件的层级结构有一定的了解,本文目前只对常用的7个控件进行介绍,后期可能会增加,欢.原创 2020-06-30 15:55:19 · 329 阅读 · 0 评论 -
(转载)深入了解iOS中的OOM(低内存崩溃)
英文原文:https://programmer.ink/think/learn-more-about-oom-low-memory-crash-in-ios.html中文翻译:https://www.taodudu.cc/news/show-5381.html在iOS开发过程或者用户反馈中,可能会经常看到这样的情况,用着用着就崩溃了,而在后台查看崩溃栈的时候,找不到崩溃日志。其实这大多数的可能是系统产生了低内存崩溃,也就是OOM(还有一种可能是主线程卡死,导致watchdog杀掉了应用),而低内存崩转载 2020-06-28 17:01:15 · 4815 阅读 · 0 评论 -
iOS 堆栈获取异常分析
最近遇到偶然Bug,ios获取堆栈时偶尔会出现无法识别的栈帧,且对应的地址与macho文件内存的image无法对应,????看看到底是什么原因:首先看现象:可以看到栈底和中间的栈帧均出现了unkonwn,且栈帧的地址明显与其他长度不一致查找关键字“unkonwn”代码中只有一处出现了此关键字????,代码定位get(注意区分unknown和unkonwn区别,这里写代码的同学“手误”(腹黑)写了两个方式来区分不同问题)代码比较简单,大概的意思是,通过读取machO文件,获取所有的原创 2020-06-22 21:07:32 · 1018 阅读 · 0 评论 -
iOS NSPROXY ARC填坑记
谨以此文纪念多个日夜不停定位问题填坑的日子。 近期,有个bug映入眼帘,主要是某段程序对http的数据进行截取,用于进行二次数据分析,然后截取数据的方式主要对系统自带的方式发送请求可以截获,也可以回调,用第三方的库则不能回调,不知道哪里环节出来问题。 第一反应,是http截取的代码与第三方库的代码存在冲突 于是将截取数据模块代码和第三方库(AFNetWork)的代码进行了全盘浏览,发现,两者代码比较相近????,事情貌似不简单,初步怀疑是部分代...原创 2020-06-15 20:42:32 · 293 阅读 · 0 评论 -
一个“反问”引发的内存反思
大家好,好久不见,最近正好有个iOS内存问题与大家分享今天,相关的同学突然发问,说我们写的代码存在内存风险????,作为内存方面的兴趣爱好者,第一时间凑了过来。。。????问题很简单,主要在于获取线程ID的方式,做iOS的同学比较熟悉,一般来说是用:[NSThread currentThread];但在一些底层功能实现时,仅仅依靠OC层时不够的,特别是在做一些HOOK,或者捞取一些系统数据时,还需要C/C++的实现,比如:https://stackoverflow.com/que原创 2020-06-10 22:57:44 · 1056 阅读 · 0 评论 -
Instrument Driver (iOS下的自动化测试)
http://blog.csdn.net/horkychen/article/details/8075024InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例。 研究过iOS自动化测试的同学肯定对 instrument UI Automation 有所转载 2015-10-28 14:59:21 · 560 阅读 · 0 评论 -
如何使用UIAutomation进行iOS 自动化测试
转自http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html大神的文章,大神的翻译写在前面研究iOS的自动化测试也有些日子了,刚开始的时候,一直苦于找不到什么好的资料,只能从Apple的官网查阅相关的API文档,只可惜,Apple对开发者来说实在是不怎么友好,文档写得相当的粗略,对于初学者来说有一定的难度。转载 2015-10-28 14:53:24 · 1416 阅读 · 0 评论 -
基于instruments-Automation的iOS应用UI自动化测试图文攻略
转自:http://blog.csdn.net/close_marty/article/details/34527821iOS的自动化测试框架可分为两种:注入式和非注入式。注入式的框架通常会提供一些Lib或者是Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对app的驱动,典型的比如monkeytalk。非注入式的框架则是通过苹果提供的instrum转载 2015-10-28 14:44:26 · 660 阅读 · 0 评论