随笔分类 -  12:OC底层知识和面试

isa、class、cache、msg_send、llvb启动流程、object_init、mapImage、loadImage、kvc、kvo、pthread、NSThread、NSOperation、GCD、@synchronized、NSLock、NSCondition、LLVM、Clang、二进制重排、内存管理、组件化、MVC、MVVM+RAC、MVP
031*:组件化(url-block 、target-action、protocol-class)
摘要:问题 简单来说:一个模块对应一个 Mediator的分类 ,一个分类对应一个target,一个target可以包含多个action,每个action都是进行界面跳转。 1、url-block 路由:路由 2、target-action:runtime+分类。 3、protocol-class匹配:通 阅读全文

posted @ 2020-12-04 20:30 风zk 阅读(545) 评论(0) 推荐(0)

030*:界面优化(CoreImage、CoreGraphics、OpenGL ES、metal、CoreAnimation【CALayer】)(预排版,异步渲染,按需加载,动态添加控件,避免使用透明度和圆角,离屏渲染,异步渲染合成一张图片)
摘要:问题 (CoreImage、CoreGraphics、OpenGL ES、metal、CoreAnimation【CALayer】) 1: 目录 1:卡顿的原理 2:卡顿监控 3:卡顿的优化 预备 正文 一:卡顿的原理 1:界面卡顿 通常来说,计算机中的显示过程是下面这样的,通过CPU、GPU、显示 阅读全文

posted @ 2020-12-04 20:20 风zk 阅读(418) 评论(0) 推荐(0)

029*:runloop:获取(CFRunLoopGetMain、CFRunLoopGetCurrent)创建(__CFRunLoopCreate __CFRunLoop结构体 )(CFRunloop、CFRunLoopMode、CFRunloopItem)(CFRunLoopRun -> CFRunLoopRunSpecific -> __CFRunLoopRun)
摘要:问题 0:Runloop生命周期 kCFRunLoopEntry -- 进入runloop循环 kCFRunLoopBeforeTimers -- 处理定时调用前回调 kCFRunLoopBeforeSources -- 处理input sources的事件 kCFRunLoopBeforeWait 阅读全文

posted @ 2020-12-04 20:19 风zk 阅读(307) 评论(0) 推荐(0)

028*:NSAutoReleasePool(objc_autoreleasePoolPush、objc_autoreleasePoolPop)AutoreleasePoolPageData(56) 哨兵元素 autoreleaseFast(autoreleaseNoPage、autoreleaseNewPage、autoreleaseFullPage)
摘要:问题 1:每个线程创建的时候就会创建一个autorelease pool,并且在线程退出的时候,清空autorelease pool。所以子线程的autorelease对象,要么在子线程中设置runloop清楚 2:AutoreleasePoolPage 面试题1:临时变量什么时候释放?面试题2:简 阅读全文

posted @ 2020-12-04 20:18 风zk 阅读(171) 评论(0) 推荐(0)

027*:内存管理 retainCount(TaggedPointer、retain、release、dealloc)(strong & weak )__main_block_impl_0(id类型-__block-->> __Block_byref_a_0-->>forwarding指针指向copy后的地址)SideTables 、extra_rc(引用计数)
摘要:问题 retainCount (TaggedPointer、retain、release、dealloc) (strong & weak ) __main_block_impl_0(id类型-__block-->> __Block_byref_a_0-->>forwarding指针指向copy后的地 阅读全文

posted @ 2020-12-04 20:16 风zk 阅读(169) 评论(0) 推荐(0)

026*:冷热启动优化、二进制重排、clang插桩(Header、Load Commands 、segment)(main函数前、main函数后)重签名 、ASLR、(PageFault 、System Trace、order文件)-fsanitize-coverage=func,trace-pc-guard Dl_info
摘要:问题 1:(虚拟内存、ASLR)(PE、ELF、Mach-O) 2:(Header、Load Commands 、segment) 3:Header(cputype、filetype) 4:Load Commands(动态链接器的位置、程序的入口、依赖库的信息、代码的位置、符号表的位置) 5:(ma 阅读全文

posted @ 2020-12-03 16:18 风zk 阅读(1170) 评论(0) 推荐(0)

025*:LLVM和clang插件开发(预处理编译阶段--编译阶段(词法、语法等的分析、生成中间代码IR【 .ll文件、IR优化、bitCode优化.bc】)--汇编代码 .s文件--生成目标文件 .o文件 --链接【产生的.o文件和.dylib、.a文件链接】--mach-o可执行文件)
摘要:问题 (预处理编译阶段--编译阶段(词法、语法等的分析、生成中间代码IR【 .ll文件、IR优化、bitCode优化.bc】) --汇编代码 .s文件 --生成目标文件 .o文件 --链接【产生的.o文件和.dylib、.a文件链接】--mach-o可执行文件) 目录 1:概念 2:编译流程 3:自 阅读全文

posted @ 2020-12-03 11:29 风zk 阅读(620) 评论(0) 推荐(0)

024*:Block的原理 (Block_layout、__main_block_impl_0、__Block_byref_a_0)(_Block_copy、_block_invoke)(_Block_copy、_Block_byref_copy、_Block_object_assign、_Block_object_dispose)
摘要:问题 1:block的本质是对象、函数、结构体,由于block函数没有名称,也被称为匿名函数 2: __weak __strong __block 3:(NSGlobalBlock NSMallocBlock NSStackBlock) 4:(_Block_copy、_block_invoke) 5 阅读全文

posted @ 2020-12-03 11:27 风zk 阅读(323) 评论(0) 推荐(0)

023*:定时器和锁原理 ( Dispatch_source_t NSTimer CADisplayLink) @synchronized(SyncList SyncData threadCount lockCount )(NSLock当前线程一把锁)(NSRecursiveLock当前线程递归锁相当多把锁)(NSCondition线程+锁)(NSConditionLock线程、条件和锁)
摘要:自旋锁和互斥锁:区别 1:而Spin lock(自旋锁)则不然,它属于busy-waiting类型的锁,如果线程A是使用pthread_spin_lock操作去请求锁,那么线程A就会一直在Core0上进行忙等待并不停的进行锁请求,直到得到这个锁为止。 自旋锁(Spin lock) 自旋锁与互斥锁有点 阅读全文

posted @ 2020-12-03 11:26 风zk 阅读(206) 评论(0) 推荐(0)

022*:GCD源码底层探索 (dispatch_group_async dispatch_group_enter dispatch_group_leave) _dispatch_call_block_and_release (dx_push pthread_creat dx_invoke)dispatch_semaphore_signal wait create
摘要:问题 _dispatch_call_block_and_release 执行任务 同步回调,block执行 block回调:底层通过dx_push递归,会重定向到根队列,然后通过pthread_creat创建线程,最后通过dx_invoke执行block回调(注意dx_push和 dx_invoke 阅读全文

posted @ 2020-12-03 11:25 风zk 阅读(674) 评论(0) 推荐(0)

021*:GCD 【dispatch_async dispatch_queue_t】 dispatch_group_t、dispatch_barrier_async 、dispatch_semaphore_t、dispatch_once_t、dispatch_apply、dispatch_after、dispatch_source_t 、pthread 、NSThread、NSOperation
摘要:问题 dispatch_sync将任务 block通过 push到队列中,然后按照 FIFO去执行。 dispatch_sync造成死锁的主要原因是堵塞的tid和现在运行的tid为同一个 dispatch_async会把任务包装并保存,之后就会开辟相应线程去执行已保存的任务。 semaphore主要 阅读全文

posted @ 2020-12-03 11:20 风zk 阅读(202) 评论(0) 推荐(0)

020*:多线程基础知识:(进程、线程、线程池)(线程生命周期【新建、就绪、运行、阻塞、销毁】)(锁【自旋锁 原子锁、互斥锁】)(线程、runloop、NSPort)(线程通讯)
摘要:问题 (进程、线程、线程池) (线程生命周期【新建、就绪、运行、阻塞、销毁】) (锁【自旋锁 原子锁、互斥锁】) (线程、runloop、NSPort) (线程通讯) 目录 1:进程与线程 2: 多线程的优缺点 3:多线程的内存消耗 4:多线程处理方案 5:线程生命周期 6:线程池的原理 7:线程优 阅读全文

posted @ 2020-12-03 10:17 风zk 阅读(142) 评论(0) 推荐(0)

019*:内存五大区:(栈、堆、全局静态区、常量区、代码区)(线程、函数栈、栈帧)
摘要:问题 目录 1:内存基础概念 2:内存五大区 3:函数栈 预备 正文 一、内存基础概念 1.1 物理内存 & 虚拟内存 物理内存(Physical Memory):指通过物理内存条而获得的内存空间,和虚拟内存对应;主要作用是:设备运行时为操作系统和各种程序提供临时储存空间;iPhone 6 和 6 阅读全文

posted @ 2020-12-03 10:16 风zk 阅读(1330) 评论(0) 推荐(1)

018*:kvo:(context、kvo合规【kvc基础上】)(isa-swizzling kvo派生类 NSKVONotifying_本类名)(重写setter、class、dealloc、_isKVOA)(重写set【手动开启通知、修改isa】、class、malloc【修改isa】)
摘要:问题 目录 预备 1:测试代码:(监听person对象的name属性的新值) // HTPerson @interface HTPerson : NSObject @property (nonatomic, copy) NSString *name; @end @implementation HTP 阅读全文

posted @ 2020-12-02 23:55 风zk 阅读(213) 评论(0) 推荐(0)

017*:kvc原理 :(赋值和取值【_key,_iskey,key,iskey】(【路由、模型转换、私有变量】)
摘要:问题 目录 1、定义 2、KVC 相关方法 3、赋值的策略 预备 1: 定义基本的方法 @interface LPPerson : NSObject{ @public NSString *_isName; NSString *name; NSString *isName; NSString *_na 阅读全文

posted @ 2020-12-02 23:52 风zk 阅读(348) 评论(0) 推荐(0)

016*:方法交换Method-Swizzling?(1:一次性问题:load或者initialize 2: 子类不和父类方法。)
摘要:问题 1:一次性问题:load或者initialize 2: 子类不和父类方法。 目录 1:method-swizzling 是什么? 2:注意: 3:method-swizzling - 类方法 4:method-swizzling的应用 预备 测试代码:HTRuntimeTool类:负责方法交换 阅读全文

posted @ 2020-12-02 23:50 风zk 阅读(239) 评论(0) 推荐(0)

015*:面试题
摘要:一:Runtime Asssociate方法关联的对象,需要在dealloc中释放? 不需要 当我们对象释放时,会调用dealloc 1、C++函数释放 :objc_cxxDestruct 2、移除关联属性:_object_remove_assocations 3、将弱引用自动设置nil:weak_ 阅读全文

posted @ 2020-12-02 22:52 风zk 阅读(101) 评论(0) 推荐(0)

014*:分类和类扩展和关联属性-(AssociationsHashMap-ObjectAssociationMap)
摘要:关联对象本质 关联对象底层实现:**其实就是两层哈希map , 存取的时候两层处理**。 第一层:类名object:bucket【AssociationsHashMap】 第二层:key:ObjcAssociation(value和policy)【ObjectAssociationMap】 1: C 阅读全文

posted @ 2020-12-02 19:31 风zk 阅读(315) 评论(0) 推荐(0)

013:分类的加载:realizeClassWithoutSwift -> methodizeClass -> attachToClass ->load_categories_nolock->attachCategories, loadImage的加载
摘要:问题 懒加载分类会在编译器把数据加载 只要有非懒加载分类会走attachCategories来加载分类数据 1:methodizeClass内部有对分类的处理 2:attachToClass 3:attachCategories函数:绑定分类。 4:extAllocIfNeeded:-> extAl 阅读全文

posted @ 2020-12-02 17:10 风zk 阅读(232) 评论(0) 推荐(0)

012:类的加载上:mapImage-[readClass->UnfixedSelectors->readProtocol]->realizeClassWithoutSwift->[methodizeClass->prepareMethodLists->fixupMethodList]->attachCategories)、loadImage(加载load方法),
摘要:问题 readImage->(readClass->UnfixedSelectors->readProtocol)->realizeClassWithoutSwift->methodizeClass->attachCategories) 1: readImage 2:readClass->Unfix 阅读全文

posted @ 2020-12-02 13:36 风zk 阅读(256) 评论(0) 推荐(0)

导航