比如你要给一个类中的属性赋值或者取值,可以直接通过类和点运算符实现,当然也可以使用KVC。...KVC运行时首先会优先调用属性的getter和setter,这一点可以在代码输出的第二行和第三行看到,如果没有,就会优先搜索_property,不存在则搜索property,如果仍然没有,就会调用setValue...:forUndefinedKey:和valueForUndefinedKey:方法 KVO Key Value Observing 介绍 KVO其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离... 或者 KVO 是一个非正式的协议,该协议定义了一个观察和通知对象之间状态变化的通用机制。...漫谈 KVC 与 KVO Reference iOS开发系列—Objective-C之KVC、KVO
KVO 键值观察者 (Key-Value Observer):是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。...实现原理 基本的原理:当观察对象A时,KVO机制动态创建一个对象A的子类 NSKVONotifying_A,该类继承自对象A,并为这个新的子类重写观察属性keyPath的setter 方法。...setter 方法会负责在调用原 setter 方法之前和之后,通知所有观察对象属性值的更改情况。...在这个过程,被观察对象的 isa 指针从指向原来的A类,被KVO机制修改为指向系统新创建的子类NSKVONotifying_A类,来实现当前类属性值改变的监听 如何手动实现KVO?
1、GCD简介 全称是 Grand Central Dispatch; 纯 C 语言,提供了非常多强大的函数; GCD是非常高效的多线程开发方式,它并不是Cocoa框架的一部分 1.1 GCD优势 GCD...是苹果公司为多核的并行运算提出的解决方案; GCD 会自动利用更多的CPU内核(比如双核、四核) GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 总结:将任务添加到队列,并且指定执行任务的函数...1.2 GCD函数 同步函数 通过dispatch_sync(queue , {})获取; 必须等待当前语句执行完毕,才会执行下一条语句; 不会开启其他线程,就在当前线程中完成任务; 异步函数...这种情况下也会产生死锁,任务二(同步函数)和任务三(同步函数需要执行的block)相互等待; 总体来说涉及到串行队列的嵌套就容易出现死锁,使用时一定要注意;串行队列里添加同步任务队列必定会出现死锁; 2.3...^{ NSLog(@"3"); }); dispatch_async(queue1, ^{ NSLog(@"4"); }); 1 2 一定在3前面执行,4一定在3后面执行; 2.8 GCD
通过KVC修改属性会触发KVO么? 2\. KVC的赋值和取值过程是怎样的?原理是什么? 什么是KVO?...那么问题来了,同样走的是DLPerson类中的setAge方法,为什么person1就会走到,方法中而person2就不会呢?...都是实例对象 所以person1和person2的isa指针指向的都是类对象, 所以说,如果对象没有添加KVO监听那么它的isa指向的就是自己原来的类对象,如下图 person2.isa ==...手动调用willChangeValueForKey:和didChangeValueForKey: 直接修改成员变量会触发KVO么? 不会触发KVO,因为直接修改成员变量并没有走set方法。...KVC相关: 通过KVC修改属性会触发KVO么? 会触发KVO,如上流程图 KVC的赋值和取值过程是怎样的?原理是什么? 如上流程图 KVC可以修改私有属性和私有成员变量吗?
对于iOS程序,使用多线程有几类: c语言的pthread_t NSThread GCD NSOperation 使用的比较多的应该就是GCD和NSOperation了,对于这两者的讨论可以看看这个 NSOperation...一般分为两大类型:并发队列和串行队列。并发功能只有在异步函数下才有用。...在串行队列只开启一条线程 在并发队列开启多条线程 主队列 主队列是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行。...出现这个问题的原因是async开的新线程中的runLoop没有启动,在后面加上 [[NSRunLoop currentRunLoop] run]; 即可。...的相关问题了。
KVO 在iOS应用场景还是挺多的, 虽然Swift新增属性观察器,但是在深层观察属性,KVO在一些场景还是比较方便。...环境 ---- Swift Version:4.0 Xcode:10.1 (10B61) iphoneOS:12.1 问题 ---- 先看下代码,我要观察currentOrderNum这个属性的新值变化...Int{ calcultorTotal(number: newNumberValue) } } } 问题出来了,这样写是不会回调的...KVO原理需要用到运行时,苹果在Swift4.0的时候,只有在标有@objc的时候才不静态派发,放到运行时的时候决定。如果没有标@objc默认属性静态派发,导致KVO监听该属性无法工作。
和NSOperationQueue这一面向对象的多线程类,这两个类与GCD提供的功能类似,NSOperation提供任务的封装,NSOperationQueue顾名思义,提供执行队列,可以自动实现多核并行计算...NSOperation “任务的封装” 和GCD类似,GCD向队列提交任务,NSOperation就是对任务进行的封装,封装好的任务交给不同的NSOperationQueue即可进行串行队列的执行或并发队列的执行...NSBlockOperation和NSInvocationOperation,这两个子类已经帮我们完成了各种属性的设置操作,我们只需要编写一个任务的block或者一个方法即可像使用GCD一样方便的编写多线程程序...的源码时可以发现,这些库中大量用了NSOperation和NSOperationQueue,当然也用了GCD,比如SDWebImage下载图片的任务是自定义的NSOperation子类SDWebImageDownloaderOperation...下载的效果 备注 由于作者水平有限,难免出现纰漏,如有问题还请不吝赐教。
; dispatch_async(dispatch_get_main_queue(), ^{ [self refreshViews:data]; });}); 有个致命的问题...dataWithContentURL:是同步的拉取数据,它会一直阻塞线程直到完成请求,如果是遇到了超时的情况,它在这个时间内会一直占有这个线程;在这个期间并发队列就需要为其他任务新建线程,这样可能导致性能下降等问题...2、NSOperationQueue相对于GCD来说有以下优点: 提供了在 GCD 中不那么容易复制的有用特性。...NSOperationQueue 有两种不同类型的队列:主队列和自定义队列。主队列运行在主线程之上,而自定义队列在后台执行。...如果你不使用它们默认的 setter 来进行设置的话,你就需要在合适的时候发送合适的 KVO 消息。
这里小编有收集一些相关的问题,其中大部分都是大厂面试或者面试其他人用到的,能命中大部分的面试和日常工作,更希望你可以用它来检验自己! 因为问题量比较大,所以这边只会提供问题!...还是希望各位发挥自己的动手能力,来给出最好的答案~ 当然,小编也有整理一些问题和答案的pdf文件,需要的话可以直接添加Q群:679884541群文件下载即可~ runtime相关问题 runtime是iOS...为什么 Runloop & KVO runloop runloop对于一个标准的iOS开发来说都不陌生,应该说熟悉runloop是标配,下面就随便列几个典型问题吧 app如何接收到触摸事件的 为什么只有主线程的...runloop是开启的 为什么只在主线程刷新UI PerformSelector和runloop的关系 如何使线程保活 KVO 同runloop一样,这也是标配的知识点了,同样列出几个典型问题 实现原理...分别对比 GCD有哪些队列,默认提供哪些队列 GCD有哪些方法api GCD主线程 & 主队列的关系 如何实现同步,有多少方式就说多少 dispatch_once实现原理 什么情况下会死锁 有哪些类型的线程锁
gcd,哈希表问题:LeetCode #357 355 365 367 380 1 编程题 【LeetCode #357】计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x...有两个容量分别为 x升 和 y升 的水壶以及无限多的水。...,即寻找x和y的最大公约数,然后z为其最大公约数的整数倍。...最大公约数算法也叫gcd,至于算法原理来自一个数学定理,记下好了!剩余的就是一些边界条件问题!...}; 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-perfect-square 【LeetCode #380】常数时间插入、删除和获取随机元素
访问实例变量不会触发KVO -init及-dealloc方法中应使用实例变量 对象内部应尽量遵守如下原则:取值采用实例变量,赋值采用属性。 ---- 2.消息转发机制流程 ?...如此操作后和能会由于竞态使得部分情况外部可以修改属性值,外部也可通过KVC来更改属性值 ---- 4.将类的实现代码分散到便于管理的数个分类之中 通过分类机制,可以把类代码分成很多个易于管理的小块,...如果想要添加延时任务,条件允许的情况下应尽可能选择GCD。 ---- 9.合理使用GCD与NSOperation GCD为纯C的API,而NSOperation则是OC对象。...与NSOperation比起来GCD更加轻量,然而NSOperation却有以下几点在使用上更加便捷: 取消操作 指定依赖关系 提供KVO监听 指定优先级 重用对象 ---- 10.多用Block枚举,...好的,今天的内容就到这里了,有什么问题可以来老司机的个人博客、GitHub
KVC、KVO、Delegate、Notification的使用方法,来探讨KVO、Delegate、Notification的区别以及相关使用场景,本系列文章将分一下几篇文章进行讲解,读者可按需查阅。...机制类似,KVO触发的回调函数也可以被对个对象响应,但代理模式delegate则是一种一对一的模式,委托对象只能有一个,对象也只能和委托对象通过代理的方式通信。...delegate的栗子相同,只不过这里使用通知来实现,依旧是两个页面,ViewController和NextViewController,在ViewController中有一个按钮和一个标签,点击按钮跳转到...我们在NextViewController中发送的通知是在main线程中发送的,因此ViewController中的监听器回调函数也会在main线程中执行,因此我们在监听器回调函数中修改UI不会产生任何问题...丝滑键盘 备注 由于作者水平有限,难免出现纰漏,如有问题还请不吝赐教。
可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。...示例代码如下: 相比NSInvocationOperation推荐使用NSBlockOperation,因为它代码简单,同时由于闭包性使它没有传参问题,NSInvocationOperation在Swift...在开始使用GCD的时候,需要搞清楚任务和队列这两个概念。...相比NSInvocationOperation推荐使用NSBlockOperation,代码简单,同时由于闭包性使它没有传参问题....NSOperation是对GCD面向对象的ObjC封装,但是相比GCD基于C语言开发,效率却更高,建议如果任务之间有依赖关系或者想要监听任务完成状态的情况下优先选择NSOperation否则使用GCD.
seconds秒 调用这两个方法中任一方法,当前线程会睡眠(暂停)所设置的时间后,才会执行后面的操作 11)、强制停止线程,让当前线程提前结束它的生命:+ (void)exit; 7、多线程安全问题...synchronized(所对象) { //需要锁定的代码 } ; // 线程同步:多条线程按顺序地执行任务 2)、互斥锁的优缺点: 优点:能有效防止因多线程抢夺同一资源造成的数据安全问题...纯C语言,提供了非常多强大的函数 2)、GCD的优势: GCD是苹果公司位多核的并行运算提出的解决方案;会自动利用更多的CPU内核; 会自动管理线程的生命周期(创建线程、调度任务、销毁线程...) 3)、GCD中2个核心概念:任务和队列。...即表现为串行和并行 5、那异步和同步函数的作用在哪里? 是否开启多条线程,然后执行的队列(任务)是否按顺序还是不按顺序执行,都需要异步和同步函数的配合才能实现!
出这些题的原因是,根据咱们公司对人才的需求(和能给出的薪资范围),给出一条主线,面试的时候根据主线来走,期间有可以扩展的问题扩展,可以省掉的问题省掉。...有看博客,写博客吗 10.讲下你工作中遇到的一些问题和如何解决它们的,讲下你的优点 1.第一题其实是没有任何问题的,这道题考的其实是开发者对代码的掌控程度,信心。...) 的博客觉得问题还可以,借鉴来的,第三题考开发者对项目的整体架构设计和对项目的负责程度。...4.在问第四题的时候我会选择性的去问一下KVO和KVC,没必要的就不会问,问KVC主要想知道用于做什么,KVO用于做什么,回调方法是什么...面试者若说没怎么用或者没用过,我便不会问。...问的时候都说会用,用得最多GCD,问到GCD的同步异步和队列组合用法,不会;问到GCD中的group、queue、semaphore、barrier等,几乎都不会,说知道的,问得细一点,还是不会。
最常见的实现消息转发:就是重写方法3和4,吞掉一个消息或者代理给其他对象都是没问题的 如何调用_objc_msgForward?...但如果你使用一些参数中可能含有 ivar 的系统 api ,如 GCD 、NSNotificationCenter就要小心一点:比如GCD 内部如果引用了 self,而且 GCD 的其他参数是 ivar...16、GCD的队列(dispatch_queue_t)分哪两种类型?...@max.age" 25、KVC和KVO的keyPath一定是属性么? KVC 支持实例变量,KVO 只能手动支持手动设定实例变量的KVO实现监听 26、apple用什么方式实现对一个对象的KVO?...其实不然,这里有一个observeValueForKeyPath:ofObject:change:context:, 和didChangeValueForKey:到底谁先调用的问题:如果observeValueForKeyPath
更多资料在公众号获取 Okcoin 1、项目中比较熟悉的问题 2、App如何减size,如何优化,资源如何减小 3、DNS解析 4、网络四层模型 5、KVO的原理,为什么要在子类重写setter方法而不在自身...11、求两条链表相交的第一个节点 12、runloop是用来做什么的 13、GCD和NSOperation本质的区别是什么 14、信号量、如果有两组任务执行,需要先执行某两组,再执行另外两组,有多少种方式...为什么 6、block如何修改外部变量 7、 runtime消息转发流程和结构体 8、 GCD和NSOperation的利弊 9、 说一下runloop 10、 图片缓存的原理和图片移除的原理(主要考察最长时间算法...gcd和nsoperation如何实现 5、 做过什么性能优化的东西 美团 1、特别想介绍的项目 2、 热修复的原理? 3、运行时的介绍? 消息转发的流程 4、 OC中相关动态的方法?...5、运行时解决过什么问题 6、 kvo的实现过程? 主要解决什么问题呢? 7、 self和super的区别 8、组件化如何通讯 9、tcp udp http 10、做过什么网络优化的操作么?
于是,Modern Objective-C开发者有两个选择:GCD和NSOperation. 由于GCD已经发展的比较主流了,我们稍后再说它,先说说面向对象的NSOperation....-> isExecuting -> isFinished State是通过这些keypath的KVO通知来隐式的得到,而不是显式的通过一个state的属性。...就是说,当一个operation已经准备就绪,将要被执行时,它会为isReadykeyPath发送一个KVO的通知,对应的属性值也会变为YES....和state类似,当NSOperation的被取消,是通过isCancelledkeypath的KVO来获得。当NSOperation的子类覆写cancel方法时,注意清理掉内部分配的资源。...相对于GCD非常适用于in-line的异步处理,NSOperation提供了更综合的、面向对象的计算模型,非常适用于封装结构化的数据,重复性的任务。
(不仅仅是线程与锁); 开发者只需要告诉 GCD 该干什么,无需多余的线程管理代码; 1、任务与队列 GCD 中有两个重要概念:任务 和 队列。...三、NSOperation 和 NSOperationQueue NSOperation 和 NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。...两者分别对应 GCD 的任务与队列。相比 GCD,NSOperation 和 NSOperationQueue 更加简单易用,代码可读性也更高,但是系统开销会稍微大一点。...符合 KVO 的属性 NSOperation 类的部分属性是符合 KVC 和 KVO 的。 isCancelled > 是否被 `cancel`。只读。...在子类化 NSOperation 时,如果对上述几个属性提供了自定义实现,务必实现 KVC 和 KVO。同样的,要是新增了一些属性,最好也实现 KVC 与 KVO。
以前的 AssetsLibrary 和现在的 Photos 框架都知道吗?...(我说了关于现在引入 Photos 和 PhotosUI 之后可以获取 LivePhoto 的问题) 都熟悉哪些框架,有没有特别了解的?...(我说我熟悉 WebKit,然后他就问了我 GCD = =) (发现我会用 GCD 之后)能不能说一下底层?...其他的光知道没用过,不敢拿出来装B) 说一下 MVVM (泪奔,难得在面试的时候能碰上自己很熟悉的,推荐不熟悉的看看最近挺火的文章《面向协议的 MVVM 架构介绍》) 知道 KVO、KVC 吗?...(其中我提到了一些推广平台,国内的有 36Kr 的 NEXT、爱范儿的 MindStore 和 AppSo,国外的有 ProductHunt,好像他在听的时候还在一边拿笔记,人家也还在学习啊~)
领取专属 10元无门槛券
手把手带您无忧上云