4 CaicaiNo.1

我要认证

暂无相关简介

等级
TA的排名 3w+

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

文章目录概述Runloop Observer的问题AutoreleasePool界面更新概述首先,我来描述一下这个问题,NSHashTable 是OC中用于弱引用对象的NSMutableSet 类型,在项目使用中,我们发现调用其 allObjects 方法会造成强引用关系,导致对象不会释放。具体情况如下:我们监听了主线程的 Runloop 并在 kCFRunLoopBeforeWaiting | kCFRunLoopExit 时触发,由于我们需要统计 UITableViewCell 的信息,所以我们将

2020-07-03 10:13:23

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

文章目录问题探索Runloop的mode是如何切换的mode切换时会退出吗?问题Runloop的mode是如何切换的?Runloop的mode切换时,上一个mode是需要退出吗?探索Runloop的mode是如何切换的UITableView滑动时,Runloop会进行切换mode,由kCFRunLoopDefaultMode切换为UITrackingRunLoopMode,根据源码,切换mode实际是调用CFRunLoopRunSpecific 这个函数SInt32 CFRunLoopRu

2020-07-01 15:12:13

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

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

2020-06-23 19:53:41

iOS开发-NSMapTable NSHashTable NSPointerArray的使用

文章目录NSMapTableNSDictionary的局限性NSMapTable优势配置参数 OptionsMemory OptionARC下MRC下Personality optionsUsage快捷生成自定义配置NSHashTableNSHashTable 优势配置参数UsageNSPointerArrayNSPointerArray 特性创建Usage对于工程中使用的弱引用集合的特性进行整理,有些点还是容易忘记NSMapTable NSHashTable NSPointerArray 是iOS中用

2020-06-18 15:18:16

iOS开发 - method swizzle方式的选择

文章目录1 method swizzle方式的选择1.1 错误的swizzle方式1.2 正确的swizzle方式1.3 案例1 method swizzle方式的选择1.1 错误的swizzle方式根据 right-way-to-swizzle 文章的阐述,当我们进行方法交换时,实质是交换了objc_method结构体中的IMP函数指针struct objc_method SEL method_name OBJC2_UNAVAILABLE; char *meth

2020-06-16 19:26:22

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

RAC中宏的使用-预编译确定函数参数个数对于RAC框架中的宏定义,预编译期确认参数个数/** * Returns the number of arguments (up to twenty) provided to the macro. At * least one argument must be provided. * * Inspired by P99: http://p99.gforge.inria.fr */#define metamacro_argcount(...) \

2020-06-09 20:34:11

iOS开发-Audio Unit错误之CrashIfClientProvidedBogusAudioBufferList

类似堆栈如下:* thread #10, name = 'AURemoteIO::IOThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x201862df8) * frame #0: 0x00000002276974e4 AudioToolbox`CrashIfClientProvidedBogusAudioBufferList + 64 frame #1: 0x00000002277ed378 AudioToolbox`Audio

2020-05-17 12:52:20

iOS开发-NSObject的alloc函数执行

文章目录前言流程callAllocallocWithZone对流程的影响_class_createInstanceFromZone方法init和new前言探索下alloc的方法执行流程debug来调试runtime源码,执行以下逻辑:NSObject *objc1 = [[NSObject alloc] init];id __weak objc2 = objc1;id __weak objc3 = objc2;流程callAlloc调用 callAlloc// Calls [cls a

2020-05-10 16:58:38

音视频开发-AudioUnit录音

文章目录前言AudioUnit 录音前言录音功能是音视频开发中必要环节,AudioUnit作为iOS中底层音频框架,在iOS平台上,所有的音频框架都是基于AudioUnit实现的,使用AudioUnit会给你带来最大的自由度。AudioUnit中以Unit为划分,一个单元具有两个Element,在代码实现中,我们也称之为Bus,由于1和0与引文的Input和Output相似,所以我们Ele...

2020-05-08 21:22:43

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

文章目录图有向图图的实现方式遍历广度优先搜索 BFS深度优先搜索 DFSFBRetainCycleDetector的应用最近复习 FBRetainCycleDetector 源码的时候,需要的图的查询方法,深度优先搜索,这里记录下,便于系统复习。这里仅仅为分析FBRetainCycleDetector实现原理,采用深度优先搜索DFS图图由顶点(vertex)和边(edge)组成,通常表示为...

2020-05-01 12:06:38

iOS开发-MLeaksFinder原理学习

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

2020-05-01 10:15:57

iOS开发-GCD技术

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

2020-04-29 23:33:06

iOS开发-线程死锁

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

2020-04-29 16:48:04

iOS开发-weak引用以及sidetable表

文章目录__weaksidetable对象的释放__weakid obj = [[NSObject alloc] init];@autoreleasepool { id __weak obj1 = obj; NSLog(@"%@",obj1);}括号内的代码编译器会转化为:id obj1;objc_initWeak(&obj1,obj);id tmp = objc_l...

2020-04-28 23:28:18

iOS开发-class_ro_t和class_rw_t的区别

文章目录class_ro_tclass_rw_tclass_rw_t生成时机分类方法加载到class_rw_t的流程class_ro_tclass_ro_t存储了当前类在编译期就已经确定的属性、方法以及遵循的协议,里面是没有分类的方法的。那些运行时添加的方法将会存储在运行时生成的class_rw_t中。ro即表示read only,是无法进行修改的。struct class_ro_t {...

2020-04-27 23:26:57

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

一个 NSObject 对象占用多少内存空间?在64位CPU中,NSObject 对象占用大小为16字节,其中8字节为指针大小,8字节为实例对象结构体所占大小。在32位CPU中,NSObject 对象占用大小为8字节,其中4字节为指针大小,4字节为实例对象结构体所占大小。可以参考唐巧的 深入理解Tagged Pointer故所以当4个字节就能表示的值,要用8个字节来存储时,就会很浪费内...

2020-04-27 20:52:31

日常学习-关于GSIMap结构

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

2020-04-27 00:31:25

iOS开发-关于block块的实现

文章目录block的结构体没有引入变量的block引入变量的block引入常量引入block引入 __attribute__((NSObject)) 变量引入__block前缀变量访问__block的变量(声明范围内)访问__block的变量(block内)引入的__attribute__((NSObject)) __block 变量block 的释放block 嵌套Object-C扩展block...

2020-04-26 17:32:28

iOS开发-NSNotification源码原理学习

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

2020-04-25 18:13:28

iOS开发-airpods的音频event适配

文章目录单耳机拿下iOS 7.1 BeforeMPRemoteCommandCenter双耳机取下对于airpods的适配,主要适配其单耳机拿下pause,以及恢复和双耳机取下等情景的适配。单耳机拿下对于这些事件,airpods单耳机拿下属于pause事件Event,我们使用MediaPlayer框架。iOS 7.1 Before在iOS 7.1之前,系统提供了#import <...

2020-04-21 16:11:47

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。