ios
文章平均质量分 68
蒲公英_____
这个作者很懒,什么都没留下…
展开
-
iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+
iOS OOM 崩溃在生产环境中的归因一直是困扰业界已久的疑难问题,字节跳动旗下的头条、抖音等产品也面临同样的问题。在字节跳动性能与稳定性保障团队的研发实践中,我们自研了一款基于内存快照技术并且可应用于生产环境中的 OOM 归因方案——线上 Memory Graph。基于此方案,3 个月内头条抖音 OOM 崩溃率下降 50%+。本文主要分享下该解决方案的技术背景,技术原理以及使用方式,旨在为这个疑难问题提供一种新的解决思路。OOM 崩溃背景介绍OOMOOM 其实是Out Of Memor.转载 2020-10-19 11:42:13 · 1222 阅读 · 1 评论 -
iOS实时卡顿检测-RunLoop(附实例)
前言在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责。众所周知,iOS平台因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算、IO、绘制都有可能造成卡顿。在Xcode中已经集成了非常方便的调试工具Instruments,它可以帮助我们在原创 2020-08-03 10:48:55 · 1162 阅读 · 0 评论 -
iOS 线上app性能检测 内存、CPU、FPS
App 的性能问题虽然不会导致 App不可用,但依然会影响到用户体验。如果这个性能问题不断累积,达到临界点以后,问题就会爆发出来。这时,影响到的就不仅仅是用户了,还有负责App开发的你。线下性能监控其中线下监控使用的还是Instruments,Instruments功能很强大,下图是Instruments的各种性能检测工具。Instruments性能检测.png最新版本的Instruments 10还有以下两大优势:1.Instruments基于os_signpost 架构,可.原创 2020-07-27 10:44:12 · 1346 阅读 · 0 评论 -
iOS野指针定位总结
野指针就是指向一个已删除的对象或者受限内存区域的指针。我们写C++的时候强调指针初始化为NULL,强调用完后也为其赋值为NULL,谁分配的谁回收,来避免野指针的问题。比较常见的就是这个指针指向的内存,在别处被回收了,但是这个指针不知道,依然还指向这块内存。MRC 时代因为引用计数手动控制,所以内存很容易在别处被回收。ARC解决了大部分这种问题。、在iOS9之前,系统库的delegate和t...原创 2020-04-30 18:36:26 · 973 阅读 · 0 评论 -
iOS开发 遍历字符串中所有子字符串的位置信息 并改变颜色
我们正常用的rangeOfString这个API找到第一个符合要求的字符串就直接返回了,当我们要改变所有符合要求的字符串颜色是就不行了,那么我们就找到一个然后截取掉,一直找到最后,把所有的位置用一个数组记录一下,思路很简单,记下来方便以后直接用! NSString *content = @"qwertyuiqwertyuiqwertyui"; NSString *sub= @"...原创 2020-04-10 15:36:47 · 466 阅读 · 0 评论 -
iOS中Category的底层实现原理
1. Category的使用场景Category也叫分类或类别,是OC提供的一种扩展类的方式。不管是自定义的类还是系统的类,我们都可以通过Category给原有类扩展方法(实例方法和类方法都可以),而且扩展的方法和原有的方法的调用方式是一模一样的。比如我项目中经常需要统计一个字符串中字母的个数,但是系统没有提供这个方法,那我们就可以用Category给NSString类扩展一个方法,然后只需引...原创 2020-04-01 16:17:58 · 941 阅读 · 0 评论 -
程序员必会的十大编程算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。算法中的指令描述的是一个...原创 2020-03-28 16:32:01 · 934 阅读 · 0 评论 -
iOS runloop解决App crash并获取日志
App闪退一直是大家头疼的问题,尤其是未知的没有办法很好的做容错处理,今天就结合runloop处理崩溃问题效果实现:用法:1.将截图的中CatchedHelper文件夹拖到你的项目工程中。2.在AppDelegate.m中找到以下方法并如下添加代码:- (BOOL)application:(UIApplication *)application didFin...原创 2020-03-19 14:54:34 · 1072 阅读 · 0 评论 -
iOS Runtime中如何通过SEL找到IMP
objc_msgSend(id self, SEL _cmd, ...) 中SEL找到IMP的流程以下是苹果开源代码中Runtime底层的部分删减后的汇编代码ENTRY _objc_msgSend ldr x13, [x0] // x13 = isa and x16, x13, #ISA_MASK // x16 = class cmp x0, #0 ...原创 2020-03-16 15:30:02 · 1117 阅读 · 0 评论 -
dyld加载应用启动原理详解
我们都知道APP的入口函数是main(),而在main()函数调用之前,APP的加载过程是怎样的呢?接下来我们一起来分析APP的加载流程。一、利用断点进行追踪 首先我们创建一个工程,什么代码都不写,在main()函数处进行断点,会看到情况如下图: 01 通过上图我们可以看到,在调用堆栈中,我们只看到了star和main,并开启了主线程,其它的什么都看不到。那要怎么才能...原创 2020-03-08 21:08:24 · 791 阅读 · 0 评论 -
iOS逆向 class-dump导出 app machO里的头文件
class-dump简单介绍 如何使用class-dump一 class-dump简单介绍class-dump是可以把Objective-C运行时的声明的信息导出来的工具。实质就是可以导出.h文件。用class-dump可以把未经加密的app的头文件导出来官方网站:http://stevenygard.com/projects/class-dump/class-dump是一个ma...原创 2020-03-03 00:23:11 · 1226 阅读 · 0 评论 -
iOS逆向工具-yololib注入framework
一.yololib是干啥的?yololib可以给mach-o文件注入framework可以使用machOView软件查看注入的framework二.使用从github下载项目,编译得到yololib可执行文件. 将yololib复制到/usr/local/bin. 将ipa解压得到Payload,将从xcode生成的lyk.framework(一定要用真机编译)复制到W...原创 2020-02-21 12:44:09 · 2232 阅读 · 0 评论 -
shell脚本实现iOS包重签名及代码注入
当我们要逆向第三方应用时,首先就是要将应用安装在我们的手机上,然后进行hook分析,找到对应的方法调用,进行代码注入,破解其正常流程,从而达到逆向目的。接下来将详细讲解分析该过程具体实现。一、shell脚本实现重签名1. 我们以最常见的应用微信为例,其他应用原理一样!首先我们去PP助手下载越狱版本的微信应用,如下图:01 1.1 越狱版本的应用是没有加密的,正式版本的应用是加...原创 2020-02-20 18:59:14 · 438 阅读 · 0 评论 -
iOS block的深度探究
tags: block分两部分内容来剖析block:怎么用 为什么这么用block的堆栈分类:根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock。NSGlobalBlock:类似函数,位于text段; NSStackBlock:位于栈内存,函数返回后Block将无效; NSMallocBlock:位于堆...原创 2020-02-18 19:17:55 · 210 阅读 · 0 评论 -
iOS安全—防注入hook api “-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null”
通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于除iOS 10之外系统,) 比如,某艺,XX音乐等dylib无法注入,也就意味着没办法用cycript动态调试App,只能干瞪眼 1 -Wl,-sectcreate,__RESTRICT,__restrict,/dev/null ...原创 2020-02-17 14:47:40 · 2325 阅读 · 1 评论 -
iOS 类和元类的关系
事情的始末是这样的,同学想验证一下resolveClassMethod是否执行(resolveClassMethod是一个对象调用一个不存在类方法时,会执行此方法,不懂的要恶补一下了,可以看我这篇文章:Objective-C消息转发),然后发来了如下代码:[NSObject performSelector:@selector(hehe)];当时看完之后产生了疑惑,performSele......原创 2020-02-11 11:33:58 · 1485 阅读 · 2 评论 -
抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%
背景启动是App给用户的第一印象,对用户体验至关重要。抖音的业务迭代迅速,如果放任不管,启动速度会一点点劣化。为此抖音iOS客户端团队做了大量优化工作,除了传统的修改业务代码方式,我们还做了些开拓性的探索,发现修改代码在二进制文件的布局可以提高启动性能,方案落地后在抖音上启动速度提高了约15%。本文从原理出发,介绍了我们是如何通过静态扫描和运行时trace找到启动时候调用的函数,然后修改编...转载 2019-12-18 14:46:15 · 447 阅读 · 0 评论 -
Runtime 与 Aspects
Runtime 之 isa指针111.png1.横向看:实例是对象,类也是对象(类对象),meta类也是对象(原类对象)这是很重要的一点,希望大家理解,我们这里忽略上下结构,先看左右结构,从左到右的指向就是之前介绍的runtime源码中objc_class结构里isa的指向,Instance指的是我们创建的对象,Subclass(class)就是创建该对象的那个类,注意:创建对象的...原创 2019-11-29 16:48:08 · 178 阅读 · 0 评论 -
TableHeaderView 高度的问题
今天用xib 添加tableheaderview 自适应高度效果出来 发现高度一直不对 会有一些空白在下边找了各种办法 解决不了.无奈biadu看到有网友说 需要重新设置 tableheaderview 还是解决不了最后找到一种 办法主要是xib创建的view 才会有这种问题 代码创建没有问题解决办法: 可以先用代码新建一个view ...原创 2019-10-29 16:00:03 · 779 阅读 · 0 评论 -
iOS 13 适配 ING...
Xcode11 缺失库文件导入位置变更libstdc-6.0.9 文件下载Xcode11下 这个目录不存在了/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntim...原创 2019-10-17 10:09:54 · 1219 阅读 · 0 评论 -
iOS开发 runtime一键更换字体 -UILabel,UIFont更换字体(全部更换为三方字体)
最近在项目中,被要求将系统的苹方体全部更换为三方字体,其实更换全部字体相对比更换部分字体来的简单,我们可以使用runtime来解决.将字体添加到项目中添加到项目中 将字体拖入系统resource中, 注意选择add to taget选项 add to target 打开Target 的Build Phases --> Copy Bundle R...原创 2019-08-20 17:47:12 · 486 阅读 · 0 评论 -
iOS中block块的存储位置&内存管理
一、前言:Block是Objective-C中的一项强大的特性,Block可以看作是OC中对于闭包函数的实现,实质上Block也是一个对象~二、内存分配区域:OC中的各个主要的内存分配区域:包括有--栈区、堆区、常量区、全局静态区、文本区(代码区)内存分配区域栈区:存放函数参数值、局部变量、函数返回地址等,我们每次调用函数,都会执行压栈操作(在XCode的左侧...原创 2019-08-16 14:33:53 · 131 阅读 · 0 评论 -
CocoaPods 出现 Unable to find a pod with name, author, summary, or description matching
今天在用CocoaPods搜索时,发现如下报错[!] Unable to find a pod with name, author, summary, or description matching `AF`执行 pod setup 其实在你安装 CocoaPods 执行 pod install 时,系统会默认操作 pod setup ,然而由于墙可能会 pod setup 不成...原创 2019-08-26 16:18:03 · 12212 阅读 · 1 评论 -
iOS 13新特性 适配
1.私有KVC[self setValue:baseTabBar forKey:@"tabBar"]; //正常[_textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];///崩溃[_textField setValue:[UIFont systemFontOfSize:14] ...原创 2019-09-12 16:40:08 · 1517 阅读 · 0 评论 -
iOS 13 适配要点总结
iOS 13 支持适配的机型iPhone X、iPhone XR、iPhone XS、iPhone XS Max iPhone 8、iPhone 8 Plus iPhone 7、iPhone 7 Plus iPhone 6s、iPhone 6s Plus iPhone SE iPod touch (第七代)新特性适配1. Dark ModeiOS 13 推出暗黑模式,UIK...原创 2019-09-24 14:37:48 · 951 阅读 · 1 评论 -
iOS - Xcode8的(图片格式)assets问题导致运行iOS9.2 9.3 9.x崩溃
前言:最近升级 Xcode8.0后一直担心有什么隐藏的问题,今天又被坑了一次,不知道什么原因 Xcode 运行的时候一直crash到main函数,卡在启动页,没有任何错误信息,仔细检查了自己写的东西,确认没有什么错误,在项目里面是一顿狂找,还是无果,折腾了很久,就利用 SVN 回滚,才发现是最近添加图片的造成的原因,下面给出解决方法:6DA1D65CB694340246488599D4...原创 2017-06-07 16:41:40 · 1313 阅读 · 0 评论 -
-bash: pod: command not found 解决以及CocoaPods安装中的碰到的坑
Pods很久没用, pod报错 -bash: pod: command not found CocoaPods不能用了遇到很多坑,记录下。1,先卸载原有的CocoaPod,sudo gem uninstall cocoapods2.重新安装cocoapod, 输入命令 sudo gem install -n /usr/local/bin cocoapods(10.11之前命令 ...原创 2019-08-20 09:48:44 · 2546 阅读 · 0 评论 -
iOS 多线程:『GCD』详尽总结
为了更好的让大家了解 iOS 多线程,以及 GCD 的相关知识,我第三次对这篇文章进行了梳理,修改了 GCD 不同组合方式区别的相关总结,以及 队列、任务以及线程之间关系的形象理解。本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲解 + 总结 的文章了。通过本文,您将了解到:1. GCD 简介2. GCD 任务和队列3. G...原创 2019-08-23 17:46:14 · 274 阅读 · 0 评论 -
iOS 中 weak 的实现原理
weak底层千千万,吾竟装作看不见...weak基本用法weak是弱引用,用weak描述修饰或者所引用对象的计数器不会加一,并且会在引用的对象被释放的时候自动被设置为nil,大大避免了野指针访问坏内存引起崩溃的情况,另外weak还可以用于解决循环引用。weak原理概括weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组。weak的...原创 2019-08-14 11:53:56 · 216 阅读 · 0 评论 -
iOS runLoop 原理多线程 总结 NSTimer优化
1. RunLoop 简介1.1 什么是 RunLoop?可以理解为字面意思:Run 表示运行,Loop 表示循环。结合在一起就是运行的循环的意思。哈哈,我更愿意翻译为『跑圈』。直观理解就像是不停的跑圈。RunLoop 实际上是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行。...原创 2019-05-21 17:29:10 · 2560 阅读 · 1 评论 -
ios最新面试题及答案总结
1. 搞清楚touch事件的传递(事件的响应链)事件的响应(responder chain)只有继承了UIResponder的类才能响应touch事件,从上图的响应者链可以看出,优先是最上层的view响应事件,如果该view有视图控制器的话会是下一个响应者,否者就是该view的父视图,这样至上而下传递事件。直到单例UIWindow对象,最后是单例UIApplication对象以终止,UIA...原创 2019-05-21 11:02:15 · 1197 阅读 · 0 评论 -
iOS KVC和KVO详解
KVCKVC定义KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的。在实现了访问器方法的类中,使用点语法和KVC访问...原创 2019-05-24 17:13:47 · 246 阅读 · 0 评论 -
iOS xib上的button链接的方法不走,点击按钮有点击效果,textField可以正常输入
今天在做项目时突然发生了已经诡异的事情,就是xib上按钮有点击效果,但是不走连接的方法,然后就开始删除重新添加,clean等一系列操作,发现还是没有用,但是textField可以正常输入,经过测试发现这个页面上的按钮都没有响应,那么思考可能是这个页面存在问题,最好找到问题所在。看代码 CustomViewController *vc = [[CustomViewController allo...原创 2019-05-20 11:46:38 · 614 阅读 · 0 评论 -
iOS开发,pickerView滚动完成,防止选择不准确
pickerView滚动停止的时候才能点击确定,滚动过程和滚动减速不能点击确定按钮,否则选择数据不准确。我是在做地址选择的时候发现这个问题,我们只需要循环遍历pickerView的子view是否正在拖拽或者滚动就可以了。话不多说,直接贴代码了- (BOOL)anySubViewScrolling:(UIView *)view{ if ([view isKindOfClass:[U...原创 2019-05-20 10:57:47 · 1580 阅读 · 1 评论 -
iOS开发之禁止用户切换键盘(防止用户切换其它键盘)
iOS开发时为了安全或其它原因(特别是开放了第三方输入法之后),我们不想让用户切换键盘,但是ios中不让用户换键盘只有给textField设置secureTextEntry为NO,代价是输入的内容会变成小黑点,如果我们要输入的内容不是密码呢?下面,就让水平哥来告诉你,不让内容变成小黑点的情况下,怎么才能让用户换不了键盘首先,创建textField我就不写了,你们自己写,代理记得要加上pragma m原创 2017-05-27 11:54:22 · 2664 阅读 · 0 评论 -
ios开发指纹解锁
1.首先引入指纹解锁必须的头文件#import 2.接下来判断手机是否支持指纹这个方法是判断设备是否支持TouchID的:- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));这个是用来验证TouchI原创 2017-03-22 16:08:41 · 635 阅读 · 0 评论 -
iOS开发实时监测网络状态Reachability
iOS开发网络状态检测原创 2017-03-22 10:15:47 · 1496 阅读 · 0 评论 -
iOS开发 xcode8 和 ios10 的那些坑
1.Notification(通知)自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserNotifications的易用,功能也变得非常强大。iOS 9 以前的通知1.在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼。2.应用在运行时和非运行时转载 2016-11-07 17:52:12 · 435 阅读 · 0 评论 -
ios开发内存优化,性能优化
原起在我们通常的开发工作中,每次需求定下来的时候,开发时间都是很紧张的,于是我们就抓紧时间开发,完成需求。在匆忙开发的过程中,或多或少的会有一些性能问题存在,在开发任务完成以后,我们都要进行性能优化。现将我在开发过程中的性能优化问题分享如下。性能优化整体一览图如下: 一、数据压缩在程序的运行过程中,数据的传输也是影响程序性能的一个方面。在传输速度不变的情况下,数据量大,传输需要的时...原创 2019-06-11 18:10:19 · 184 阅读 · 0 评论 -
iOS算法笔记-快速排序-OC实现
我们有许多的排序算法可以选择,冒泡、选择、快速、插入、希尔、归并、基数等,我今天来简单介绍一下不同算法的优缺点。先普及一个概念:算法稳定性:相同元素的前后顺序在任何情况都不会发生改变,这种排序成为稳定排序算法。反之成为不稳定排序算法。冒泡排序原理:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复...原创 2019-07-19 14:10:03 · 422 阅读 · 0 评论