iOS 技术

  1. 结构体的字节对齐和OC对象的字节对齐?
  2. instance(实例对象)、class(类对象)、meta-class(元类对象)分别储存了什么信息?为什么要设计元类?
  3. KVO的具体实现流程?访问成员变量(类似self->age)会触发KVO嘛?KVC会触发KVO嘛?KVO的两个核心调用方法是?
  • 实现流程:Apple 使用了 isa 混写(isa-swizzing)来实现 KVO。当观察对象 A 时,KVO 机制动态创建一个名为 NSKVONotifying_A 的新类,该类继承自对象 A 的本类,且 KVO 为 NSKVONotifying_A 重写观察属性的 setter 方法,setter 方法会负责在调用原 setter 方法前后,通知所有观察对象属性值的更改情况。
  • 两个核心方法:KVO的键值观察通知依赖于 NSObject 的两个方法:willChangeValueForKey:和 didChangevlueForKey:,在存取数值的前后分别调用2个方法:被观察属性发生改变之前,willChangeValueForKey:被调用,通知系统该 keyPath 的属性值即将变更;当改变发生后,didChangeValueForKey: 被调用,通知系统该 keyPath 的属性值已经变更;之后observeValueForKey:ofObject:change:context: 也会被调用。且重写观察属性的setter 方法这种继承方式的注入是在运行时而不是编译时实现的。

  1. KVC的原理?getter 和 setter 的搜索策略是什么?KVC 有什么实际的应用?
  2. Catagory 和 extension 分别的使用场合和特点是什么?
  3. Catagory 的实现原理是什么?Catagory 有哪些用处?Catagory 有什么局限?
  4. Class 和 他的 Catagory 同名方法的调用顺序是什么?Catagory A 和 Catagory B 同名方法的调用顺序是如何?如果想要不按照系统顺序执行要怎么做?
  5. +load 和 +initialize 的调用时机和顺序?两者区别是什么?
  6. Catagory 有 +load 方法么?+load 是什么时候调用的?能继承么?会覆盖Class 的 +load 么?
  7. Catagory关联对象(AssociateObject)的底层实现是什么?
  8. block 的本质是什么?block 的底层实现是怎样的?block 的变量捕获是什么原理?block 的类型有哪些?什么情况下会把栈上的 block 赋值到堆上?
    (block 我真的好多都没记住啊...)
  9. isa 指针是什么?里面有哪些特殊的位数?什么是TaggedPointer的优化?
  10. class 的底层结构是什么样的?
  11. method_t 里包含什么?
  12. super 的本质是什么?
  13. OC的消息机制有几步?
  14. 如何防止类似 unrecognized selector 的错误?_objc_msgForward能干什么?
  15. runtime 有哪些应用?方法替换(method - Swizzling)有什么缺点?如何安全的进行方法替换?
  16. RunLoop 的本质是什么?
  • RunLoop(消息循环):说白了就是一种事件监听循环。就好比是一个while循环,监听到事件就起来,没有就休息。

  1. Runloop和线程是什么关系?
  • Runloop和线程的关系:一个Runloop对应着一条唯一的线程。

  • Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建。

  • Runloop的生命周期:在第一次获取时创建,在线程结束时销毁。


  1. Runloop的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?
  • 数据结构:Runloop 对象是利用字典来进行存储,而且 key 是对应的线程,value 为该线程对应的 Runloop。
  • 运行模式:
    1、kCFRunLoopDefaultMode:App的默认运行模式,通常主线程是在这个运行模式下运行
    2、UITrackingRunLoopMode:跟踪用户交互事件(用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他Mode影响),这也是为什么iOS滑动顺滑的重要原因之一
    3、UIInitializationRunLoopMode:在刚启动App时第进入的第一个 Mode,启动完成后就不再使用
    4、GSEventReceiveRunLoopMode:接受系统内部事件,通常用不到
    5、kCFRunLoopCommonModes:伪模式,不是一种真正的运行模式
  1. Runloop 的监听状态有哪几种?
  2. Runloop 的工作流程大概是什么样的?
  3. Runloop 有哪些应用?
  4. 多线程,异步执行(async)一个performSelector 会执行么?如果加上 afterDelay呢?
  5. 你知道 iOS 有哪些锁?性能分别怎么样?
  6. 自旋锁和互斥锁怎么选择?
  7. 引用计数怎么实现的?weak怎么实现的?sideTable的 底层结构是怎么样的? weak指针做了什么操作?
  8. AutoReleasePool(自动释放池) 的底层实现是什么?他怎么实现及时释放的?子线程的释放时机是怎么样的?
  9. 对象的 release 是怎么处理的?
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 1,099评论 0 10
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    iOS菜鸟大大阅读 708评论 0 1
  • 1.Difference between shallow copy and deep copy? 浅复制和深复制的...
    用心在飞阅读 991评论 0 9
  • • 深拷贝同浅拷贝的区别:浅拷贝是指针拷贝,对一个对象进行浅拷贝,相当于对指向对象的指针进行复制,产生一个新的指向...
    WSGNSLog阅读 1,254评论 0 1
  • 茫然无措的感觉,因为没有认知框架。 每天会收集到各种信息,正面的,负面的,冲击着情绪。同时害怕自己的才华得不到赏识...
    Eunice995阅读 414评论 0 2