自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CaicaiNo.1

生活需要激情,就像鱼需要水

原创 iOS开发 - NSHashTable与Runloop所造成的强引用问题

文章目录概述Runloop Observer的问题AutoreleasePool界面更新 概述 首先,我来描述一下这个问题,NSHashTable 是OC中用于弱引用对象的NSMutableSet 类型,在项目使用中,我们发现调用其 allObjects 方法会造成强引用关系,导致对象不会释放。具...

2020-07-03 10:13:23 53 0

原创 iOS开发 - Runloop的mode是如何切换的

文章目录问题探索Runloop的mode是如何切换的mode切换时会退出吗? 问题 Runloop的mode是如何切换的? Runloop的mode切换时,上一个mode是需要退出吗? 探索 Runloop的mode是如何切换的 UITableView滑动时,Runloop会进行切换mode,...

2020-07-01 15:12:13 62 0

原创 iOS开发 - OCLint自定义规则的编译与Xcode调试

OCLint的编译 基于版本 oclint version 0.15 OCLint 需要自定义规则的话需要自己编译

2020-06-23 19:53:41 71 0

原创 iOS开发-NSMapTable NSHashTable NSPointerArray的使用

文章目录NSMapTableNSDictionary的局限性NSMapTable优势配置参数 OptionsMemory OptionARC下MRC下Personality optionsUsage快捷生成自定义配置NSHashTableNSHashTable 优势配置参数UsageNSPoint...

2020-06-18 15:18:16 68 0

原创 iOS开发 - method swizzle方式的选择

文章目录1 method swizzle方式的选择1.1 错误的swizzle方式1.2 正确的swizzle方式1.3 案例 1 method swizzle方式的选择 1.1 错误的swizzle方式 根据 right-way-to-swizzle 文章的阐述,当我们进行方法交换时,实质是交换...

2020-06-16 19:26:22 44 0

原创 RAC中宏的使用-预编译确定函数参数个数

RAC中宏的使用-预编译确定函数参数个数 对于RAC框架中的宏定义,预编译期确认参数个数 /** * Returns the number of arguments (up to twenty) provided to the macro. At * least one argument mu...

2020-06-09 20:34:11 59 0

原创 iOS开发-Audio Unit错误之CrashIfClientProvidedBogusAudioBufferList

类似堆栈如下: * thread #10, name = 'AURemoteIO::IOThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x201862df8) * frame #0: 0x00000002276...

2020-05-17 12:52:20 148 0

原创 iOS开发-NSObject的alloc函数执行

文章目录前言流程callAllocallocWithZone对流程的影响_class_createInstanceFromZone方法init和new 前言 探索下alloc的方法执行流程 debug来调试runtime源码,执行以下逻辑: NSObject *objc1 = [[NSObject...

2020-05-10 16:58:38 70 0

原创 音视频开发-AudioUnit录音

文章目录前言AudioUnit 录音 前言 录音功能是音视频开发中必要环节,AudioUnit作为iOS中底层音频框架,在iOS平台上,所有的音频框架都是基于AudioUnit实现的,使用AudioUnit会给你带来最大的自由度。 AudioUnit中以Unit为划分,一个单元具有两个Eleme...

2020-05-08 21:22:43 128 0

原创 iOS开发-FBRetainCycleDetector中的深度优先搜索DFS

文章目录图有向图图的实现方式遍历广度优先搜索 BFS深度优先搜索 DFSFBRetainCycleDetector的应用 最近复习 FBRetainCycleDetector 源码的时候,需要的图的查询方法,深度优先搜索,这里记录下,便于系统复习。 这里仅仅为分析FBRetainCycleDete...

2020-05-01 12:06:38 72 0

原创 iOS开发-MLeaksFinder原理学习

文章目录内存泄漏原理 MLeaksFinder 是WeRead团队开源的iOS内存泄漏检测工具,用于检测内存泄漏 内存泄漏 app内存有3中 Leaked memory: 应用程序未引用的内存不能再次使用或释放(也可以使用Leaks仪器检测到) Abandoned memory: 应用程序...

2020-05-01 10:15:57 126 0

原创 iOS开发-GCD技术

GCD是iOS开发中常用的线程技术

2020-04-29 23:33:06 93 0

原创 iOS开发-线程死锁

文章目录线程死锁互斥锁和自旋锁iOS的常见的锁 线程死锁 线程死锁的4个必要条件: 互斥:一个资源每次只能被一个进程使用 占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源 不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的...

2020-04-29 16:48:04 88 0

原创 iOS开发-weak引用以及sidetable表

文章目录__weaksidetable对象的释放 __weak id obj = [[NSObject alloc] init]; @autoreleasepool { id __weak obj1 = obj; NSLog(@"%@",obj1); } 括号内的代码编译...

2020-04-28 23:28:18 227 0

原创 iOS开发-class_ro_t和class_rw_t的区别

文章目录class_ro_tclass_rw_tclass_rw_t生成时机分类方法加载到class_rw_t的流程 class_ro_t class_ro_t存储了当前类在编译期就已经确定的属性、方法以及遵循的协议,里面是没有分类的方法的。那些运行时添加的方法将会存储在运行时生成的class_r...

2020-04-27 23:26:57 393 0

原创 iOS开发-一个 NSObject 对象占用多少内存空间

一个 NSObject 对象占用多少内存空间? 在64位CPU中,NSObject 对象占用大小为16字节,其中8字节为指针大小,8字节为实例对象结构体所占大小。 在32位CPU中,NSObject 对象占用大小为8字节,其中4字节为指针大小,4字节为实例对象结构体所占大小。 可以参考唐巧的 深...

2020-04-27 20:52:31 75 0

原创 日常学习-关于GSIMap结构

文章目录数据结构解析 数据结构 最近研究NSNotification源码碰上了一个GSIMap结构体,发现其结构很有意思,即 * A rough picture is include below: * * * This is the map C ...

2020-04-27 00:31:25 91 0

原创 iOS开发-关于block块的实现

文章目录block的结构体没有引入变量的block引入变量的block引入常量引入block引入 __attribute__((NSObject)) 变量引入__block前缀变量访问__block的变量(声明范围内)访问__block的变量(block内)引入的__attribute__((NS...

2020-04-26 17:32:28 58 0

原创 iOS开发-NSNotification源码原理学习

文章目录问题1. 实现原理对于addObserver方法,为什么需要object参数?都传入null对象会怎么样addObserver源码逻辑2.通知的发送时同步的,还是异步的3. NSNotificationCenter接受消息和发送消息是在一个线程里吗?如何异步发送消息4.NSNotific...

2020-04-25 18:13:28 125 0

原创 iOS开发-airpods的音频event适配

文章目录单耳机拿下iOS 7.1 BeforeMPRemoteCommandCenter双耳机取下 对于airpods的适配,主要适配其单耳机拿下pause,以及恢复和双耳机取下等情景的适配。 单耳机拿下 对于这些事件,airpods单耳机拿下属于pause事件Event,我们使用MediaPla...

2020-04-21 16:11:47 179 0

原创 iOS开发-对多个对象进行消息转发

文章目录目的实现 目的 参考NSProxy的实现,那么我们需要通过对多个消息的转发如何做呢? 如何存储对象,强引用集合对象已经不可取,会使得对象引用计数+1,所以可以采用OC中弱引用集合 NSPointerArray 参考以下文章: http://www.isaced.com/post-23...

2020-04-19 00:46:24 120 0

原创 iOS开发-KVO下的isa-swizzling

文章目录前言探索1. 引用问题2. KVO原理 前言 对于KVO技术,开发中使用较多,能够监听值的改变。 探讨下KVO的技术实现,KVO接口如下: @interface NSObject(NSKeyValueObserverRegistration) /* Register or deregis...

2020-04-18 15:48:54 80 0

原创 iOS开发-isKindOfClass和isMemberOfClass

文章目录前言源码 前言 isKindOfClass和isMemberOfClass多多少少都用过 isKindOfClass 方法调用者是传入的类的实例对象,或者调用者是传入类的继承者链中的类的实例对象,则返回YES。 isMemberOfClass: returns YES if the re...

2020-04-18 12:25:17 64 0

原创 iOS开发-关于+load和+initialize

文章目录执行时机loadinitializemethod swizzle 最近面试遇到这样的问题,一般来说我们会在+load和+initialize进行method swizzle,那么两个方法差异在哪里 执行时机 load +load方法是在main函数之前被调用,先调用类的+load,再调用分...

2020-04-18 11:17:25 64 0

原创 iOS开发-main函数之前app做了哪些事

文章目录main之前1.加载可执行文件(App 的`.o `文件的集合)2.加载动态链接库,进行 rebase 指针调整和 bind 符号绑定;3.Objc 运行时的初始处理,包括 Objc 相关类的注册、category 注册、selector 唯一性检查等;4.初始化,包括了执行 +load(...

2020-04-16 22:45:22 104 0

原创 iOS学习笔记-KVC技术

文章目录 https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/KeyValueCoding.html https://developer.apple.com...

2020-04-16 01:36:12 37 0

原创 日常学习-wiki文档的编写

文章目录文本内容标题链接图片文字高亮代码文字格式列表有序列表无序列表分割线表格下拉列表引用Side BarfooterUML图 对于wiki文档的编写,这里将常用的都举例,不记得时就过来看看 对于wiki语法我们一般选择 markdown,因为其功能最多,也是最常用的。 这里都以markdown进...

2020-04-13 20:48:12 258 0

原创 音视频开发-RTP协议

文章目录RTP/RTCPRTP协议RTCP 协议附图 基于WebRTC的音视频直播框架,使用RTP/RTCP,这里记录下。 RTP/RTCP 一般情况下,在实时互动直播系统传输音视频数据流时,我们并不直接将音视频数据流交给 UDP 传输,而是先给音视频数据加个RTP 头,然后再交给 UDP 进行传...

2020-04-11 20:39:38 72 0

原创 iOS开发-如何解决静态库的冲突问题
原力计划

文章目录问题静态库Fat文件thin文件.a文件的构成解包将.o合并为.aduplicate问题各个架构的支持 问题 iOS中进入静态库经常会出现 dulipcate symbols 的问题。分享下我的处理以及经验。 静态库 在 iOS 中静态库有.a和framework文件。下面讲解如何对静态库...

2020-04-08 12:44:45 145 1

原创 iOS开发-dispatch_once相关

文章目录使用场景原理关于dispatch_compiler_barrier性能测试 使用场景 dispatch_once 能够保证代码块只执行一次,即使在多线程使用时。 一般来说我们如果要保证代码只执行一次,就是进行加锁,通过修改一个变量值0 -> 1 来判断这段代码是否执行过。 在iOS中...

2020-04-07 20:58:45 45 0

原创 iOS开发-全量日志捕获CocoaLumberjack

文章目录前言ASL 前言 全量日志就是app的运行日志打印等等。有时候光凭Crash日志并不能找到并解决问题,如果有Crash时App的日志输出,则会事半功倍。 CocoaLumberjack是OSX和iOS平台优秀的全量日志抓取第三方库。github链接 ASL (Apple system lo...

2020-04-05 14:15:23 141 0

原创 iOS开发-App电量消耗以及CPU占用

文章目录如何获取电量消耗UIDevice 获取IOKit电量分析 如何获取电量消耗 UIDevice 获取 - (float)batteryValue { [UIDevice currentDevice].batteryMonitoringEnabled = YES; return...

2020-04-04 12:19:58 74 0

原创 iOS开发-App应用崩溃卡顿分析

文章目录App崩溃问题可捕获的崩溃信息收集PLCrashReporter实现系统接口不可捕获的崩溃iOS后台模式Runloop 卡顿Watch DogApp达到单个App上限被杀死JetsamEvent 分析内存大小XNU获取内存限值task_info接口 App崩溃问题 app经常会遇见崩溃问题...

2020-04-04 01:35:52 172 0

原创 iOS开发-水印视图的简单制作

文章目录使用CoreGraphic绘制效果代码如下 使用CoreGraphic绘制 NSAttributedString能够使用drawAtPoint方法绘制到文本上 CGContextSaveGState通过Pop Push上下文堆栈,避免影响其他 通过CGContextConcatCTM可以...

2020-03-30 19:09:54 161 0

原创 iOS开发-fishhook交换NSLog函数实现

文章目录fishhookhook原理hook找到NSLog的地址hook后的地址 fishhook https://github.com/facebook/fishhook fishhook是一个facebook的开源项目。 通过修改Mach-O文件指向外部函数的指针的值,来达到hook的目的 h...

2020-03-29 17:10:10 170 0

原创 iOS开发-常见的崩溃信息

文章目录崩溃信息构成Exception信息常见的崩溃问题额外的诊断信息 崩溃信息构成 常见的崩溃日志的头部信息如下: Incident Identifier: B6FD1E8E-B39F-430B-ADDE-FC3A45ED368C CrashReporter Key: f04e68ec62d3c...

2020-03-27 10:23:04 175 0

原创 iOS开发-dSYM文件

文章目录dSYMxcode的符号化解析每个架构的符号Bitcode相关定位你的dSYMBuild UUID对比恢复隐藏的符号表文件符号化解析操作命令 dSYM 根据 苹果官方文档,当编译器将源代码转为机械码时,会生成调试符号(debug symbols),通过这些符号可以将机械码映射回到源代码的位...

2020-03-26 01:01:32 113 0

原创 iOS开发-代码分析工具之Infer

文章目录简介使用安装设置 PATH 变量使用 简介 https://fbinfer.com/docs/getting-started Infer 是一个静态分析工具。Infer可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题。 任何人都可以使用 Infer 检测应用,这...

2020-03-22 19:52:37 191 0

原创 iOS开发-代码分析工具之Clang Static Analyzer

文章目录简介使用方法 简介 Clang Static Analyzer是一款静态代码扫描工具,专门用于针对C,C++和Objective-C的程序进行分析。已经被Xcode集成,可以直接使用Xcode进行静态代码扫描分析,也可以单独在命令行下使用并提供html格式的输出报吿和xml格式的结果文件方...

2020-03-22 18:50:15 149 0

原创 iOS开发-代码分析OCLint工具

文章目录简介OCLint可以发现的问题使用安装创建所需要的文件调用分析指令Pod等三方库的过滤 简介 OCLint是一个 静态代码分析 工具,通过检查C、c++和Objective-C 代码并寻找潜在的问题. OCLint 就是一个建立在 Clang 上的工具,能够发现代码中潜在的问题,可以用来提...

2020-03-22 17:47:02 41 0

提示
确定要删除当前文章?
取消 删除