ios kvc和kvo面试题,苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100

1 , 苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100任意把硬币分成两堆,使其中一堆是10枚,则另一堆是90枚 。然后将第一堆中10枚硬币全部翻面,此时两堆中正面朝上的硬币数量相同 。其实就是取补数 。从大堆中分出10个硬币 。并全部翻面 。即可呵呵哒,我不能看不能花钱请别人帮我看吗?
2,iOS面试题如何手动触发一个 value 的 KVO KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol , 提供一种机制来间接访问对象的属性 。KVO 就是基于 KVC 实现的关键技术之一 。键值观察通知依赖于 NSObject 的两个方法:willChangeValueForKey: 和didChangevlueForKey:。在一个被观察属性发生改变之前 ,  willChangeValueForKey:一定会被调用,这就会记录旧的值 。而当改变发生后,observeValueForKey:ofObject:change:context:和didChangeValueForKey: 也会被调用 。如果可以手动实现这些调用,就可以实现“手动触发”了 。打印顺序是:1 2 3 4 。从这里看顺序似乎是wilChangeValueForKey: 、 observeValueForKeyPath:ofObject:change:context: 、 didChangeValueForKey:。其实,实际情况是: wilChangeValueForKey: 先调用,接着是调用didChangeValueForKey:  , 在 didChangeValueForKey: 内部调用了observeValueForKeyPath:ofObject:change:context:。你可以注释掉 [self didChangeValueForKey:@"now"]; 试试 。但是平时我们一般不会这么干,我们都是等系统去“自动触发” 。“自动触发”的实现原理:比如调用 setNow: 时,系统还会以某种方式在中间插入wilChangeValueForKey: 、 didChangeValueForKey:和observeValueForKeyPath:ofObject:change:context: 的调用 。大致表现如下:Apple 使用了 isa 混写(isa-swizzling)来实现 KVO,这种继承和方法注入是在运行时而不是编译时实现的 。这就是正确命名如此重要的原因 。只有在使用 KVC 命名约定时,KVO 才能做到这一点 。KVO 在实现中通过 isa 混写(isa-swizzling)把这个对象的 isa 指针(isa 指针告诉 Runtime 系统这个对象的类是什么)指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例 。Apple 还重写、覆盖了 -class 方法并返回原来的类,企图欺骗我们:这个类没有变,就是原本那个类 。更多: iOS面试题合集
3,大家都来说说在ios开发面试中都被问过什么问题1、浅复制和深复制的区别?2、obc中的协议和java中的接口概念有何不同??3、解释一下kvo 和 kvc??4、通知和协议的不同之处??每个公司的面试题不一样,可以下载“猿人部落”问问里面大牛,这样全面一些 。cell的对象是存储在栈空间还是堆空间uiview跟uiwindow什么关系和区别 , 还有一些后台问题,这是我遇到的!【ios kvc和kvo面试题,苹果公司面试题全中国没几个懂的你能答上来吗桌子上有100】
4,面试整理四KVOKVCKVO 的全称是Key-Value Observing,俗称“键值监听”,可以用来监听某个对象属性值的改变 。如果这个对象未被KVO监听的话,他的isa指针指向类对象 。这个类对象方法里存在set方法 。如果这个对象被KVO监听的话,他的isa指针指向 ”NSKVONotifying_类名“ 这么一个类 。”NSKVONotifying_类名“ 是runtime动态创建的一个类,是之前类的一个子类 。这个子类会有自己的set方法的实现 。这个子类set方法的内部实现 :总结:利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类,当修改这个instance的属性时,会调用Foundation的_NSSetXXXValueAndNotify函数: willChangeValueForKey :父类原来的setterdidChangeValueForKey内部会触发监听器(observer)的监听方法 (observeValueForKeyPath: ofObject: change: context:)不会 , 因为系统在实现KVO生成对象的子类是,使用的方法objc_setAssociatedObject(self, (__bridge const void *)@"objc", observer, OBJC_ASSOCIATION_ASSIGN); 使用的是弱引用 。使用OBJC_ASSOCIATION_RETAIN或者OBJC_ASSOCIATION_COPY就会导致循环引用 。KVC的全称是Key-Value Coding , 俗称”键值编码“,可以通过一个key来访问某个属性 。常见的API有:1.首先搜索是否有setKey:方法,没有则会搜索是否有_setKey:的方法 。2.没有找到的话 , 此时看 + (BOOL)accessInstanceVariablesDirectly (是否直接访问成员变量)方法 。若返回NO,则直接调用 setValue:forUndefinedKey: (默认是抛出异常) 。若返回yes,按_key,_isKey,key,isKey的顺序搜索成员名 。3.在第二步还没搜到的话就会调用 setValue:forUndefinedKey: 方法 。1.按先后顺序搜索getKey、key、isKey、_key方法,若某一个方法被实现,取到的即是方法返回的值 , 后面的方法不再运行 。如果是BOOL或者Int等值类型,会将其包装成一个NSNumber对象 。2.若这五个方法都没有找到,则会调用 + (BOOL)accessInstanceVariablesDirectly 方法判断是否允许取成员变量的值 。若返回NO , 直接调用 valueForUndefinedKey: 方法,默认是奔溃 。若返回YES,会按先后顺序取_key、_isKey、 key、isKey的值 。3.返回YES时,_key、_isKey、 key、isKey的值都没取到,调用 valueForUndefinedKey: 方法 。1.动态地取值和设值 。2.可以修改类的私有变量 。如UITextField的placeHolderText默认style在需求中达不到要求,我们可以直接通过KVC快速定义自己的style 。3.KVC可以用来给model赋值 。注意:如果 model 属性和 dic 不匹配会怎样?第一种情况,model多一个属性:这样程序没问题,model多出的属性会是nil第二种情况,model少一个属性:程序会崩溃第三种情况,model的属性名字和dic的key不匹配 : 程序会崩溃第二种和第三种崩溃的解决办法是重写方法-(void)setValue:(id)value forUndefinedKey:(NSString *)key 。通常情况下 , KVC不允许你要在调用 setValue: forKey:(或者keyPath) 时对非对象传递一个nil的值 。很简单,因为值类型是不能为nil的 。如果你不小心传了,KVC会调用 setNilValueForKey: 方法 。这个方法默认是抛出异常,所以一般而言最好还是重写这个方法 。4.KVC实现高阶消息传递 。对容器类使用KVC时,valueForKey:会被传递给每个容器内对象,而不是对容器本身操作 。结果会被添加进返回的容器中,这样开发者可以很方便的操作集合来返回另一个集合 。5.KVC同时还提供了很复杂的函数简单的集合运算符:简单集合运算符共有@avg,@count , @max  ,  @min,@sum5种 , 都表示啥不用我说了吧,目前还不支持自定义 。对象运算符:比集合运算符稍微复杂,能以数组的方式返回指定的内容 , 一共有两种:@distinctUnionOfObjects@unionOfObjects它们的返回值都是NSArray,区别是前者返回的元素都是唯一的,是去重以后的结果;后者返回的元素是全集 。用法如下:5,ios中KVO和KVC是什么一、KVO是注册观察者模式,是一种监听模式 。(1)通过注册观察者addObserve的方法,可以获取监听的对象变化的值,从而实现要变化的方法 。(2)例如有两个滑动视图,希望其中一个视图滑动时候,另一个视图也跟着变化,同时变化相同的偏移量 , 那么可以注册一个观察者,观察视图1的偏移量变化,在观察者方法-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context中,根据change的值获得视图1的偏移量,并让视图二做出相同的偏移 。二、KVC是访问对象属性的方法,K即key,V即Value,C是coding系统的编码方式 。(1)通过setValue:forKey的方式,给对象的某一个属性赋值,在未公开属性的情况下就可以使用这种方法. (2)比如有一个Person类,有一个Person *person = [[Person alloc] init]对象 , 想给个name属性,并给name一个值“张三” , 就可以写成[person setValue:"张三" forKey:"name"],如果说person又一个公开的name属性,那么上一句话就等于person.name=@"张三" 。http://www.mamicode.com/info-detail-515516.htmlkvo是监听(比如某个值变化了 就会调用个方法通知 。具体百度下 好多列子) kvc好像说的是访问对象属性 这个项目中没用到过 据说是鸡肋 。。。6,面试必问10大问题和答案有哪些面试必问10大问题:请你自我介绍一下你自己;说说在五年的时间内 , 你的职业规划;你对公司加班是怎么看的;请谈谈你的优点;说说你最大的缺点;就你申请的这个职位,你认为你还欠缺什么;对这项工作 , 你有哪些可预见的困难;你对薪资待遇有什么要求;你在前一家公司的离职原因是什么;你还有什么问题要问吗 。五年的时间内职业规划可以回答说我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展 。面试必问10大问题和答案是:1、请你自我介绍一下你自己?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验 , 这些在简历上都有 。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信 。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”,企业喜欢有礼貌的求职者 。2、说说在五年的时间内,你的职业规划?回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到,比较多的答案是“管理者” 。但是近几年来,许多公司都已经建立了专门的技术途径 。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等 。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作 。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会 。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展” 。3、你对公司加班是怎么看的?回答提示:实际上好多公司问这个问题,并不证明一定要加班,只是想测试你是否愿意为公司奉献 。回答参考:领导您好,如果是个人效率问题 , 我一定会努力提高效率,在合理的时间内完成工作安排,绝不用加班来弥补自己的工作效率问题;如果是工作需要我会义不容辞加班,我现在单身 , 没有任何家庭负担,可以全身心的投入工作 。但同样,我也会提高工作效率,减少不必要的加班 。4、请谈谈你的优点 。回答提示:面试官要想听的优点不见得是你最突出的优点,而应该是和你应聘的那份工作相关的优点 , 从中找出雇佣你的理由,同时可以知道你对自己的了解程度 , 看看你对自己有没有自信,以及你到底适合不适合这份工作 。因此,你要精确地描述 , 不可泛泛说些无意义的话,例如,适应力强 , 具有幽默感,合群等等 。5、说说你最大的缺点 。回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等 , 如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你 。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色 , 但事实上,他已经岌岌可危了 。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者 。回答参考:领导您好,作为一名刚毕业的大学生,本人资历较浅,经验不足 , 在工作上会有所欠缺 。其次,在做事方面有时候性子急,对于做事效率不高的人,往往会比较着急 。但是,平常我会努力平复自己的情绪 , 学会聆听,慢慢改变自己偶尔的急躁 。6、就你申请的这个职位,你认为你还欠缺什么?回答提示:企业喜欢问求职者弱点,但精明的求职者一般不直接回答 。他们希望看到这样的求职者:继续重复自己的优势,然后说:“对于这个职位和我的能力来说,我相信自己是可以胜任的,只是缺乏经验 , 这个问题我想我可以进入公司以后以最短的时间来解决,我的学习能力很强,我相信可以很快融入公司的企业文化,进入工作状态 。”企业喜欢能够巧妙地躲过难题的求职者 。7、对这项工作,你有哪些可预见的困难?回答提示:①不宜直接说出具体的困难 , 否则可能令对方怀疑应聘者不行 。②可以尝试迂回战术,说出应聘者对困难所持有的态度——工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服 。分析:一般问这个问题,面试者的希望就比较大了,因为已经在谈工作细节,但常规思路中的回答,又被面试官“骗”了 。当面试官询问这个问题的时候,有两个目的 。第一 , 看看应聘者是不是在行,说出的困难是不是在这个职位中一般都不可避免的问题 。第二,是想看一下应聘者解决困难的手法对不对,及公司能否提供这样的资源 。而不是想了解应聘者对困难的态度 。8、你对薪资待遇有什么要求?回答提示:如果你对薪酬的要求太低 , 那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重 , 公司受用不起 。一些单位通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣 。回答参考:参考1:领导您好,综合我的面试情况,您觉得我能胜任多少薪资呢?谢谢?。ㄊ屎嫌芯榈那笾罢?nbsp;, 反问HR)参考2:领导您好,因为我不清楚咱们公司的具体薪酬结构,包括绩效方面,年终福利方面 , 您可以先简单告知我一下 。谢谢!9、你在前一家公司的离职原因是什么?回答提示:①最重要的是:应聘者要使招聘单位相信,应聘者在过往的单位的“离职原因”在此家招聘单位里不存在 。②避免把“离职原因”说得太详细、太具体 。③不能掺杂主观的负面感受,如“太辛苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等 。④但也不能躲闪、回避,如“想换换环境”、“个人原因”等 。⑤不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等 。⑥尽量使解释的理由为应聘者个人形象添彩 。⑦相关例子:如“我离职是因为这家公司倒闭;我在公司工作了三年多 , 有较深的感情;从去年始,由于市场形势突变,公司的局面急转直下;到眼下这一步我觉得很遗憾 , 但还要面对显示,重新寻找能发挥我能力的舞台 。”同一个面试问题并非只有一个答案 , 而同一个答案并不是在任何面试场合都有效 , 关键在应聘者掌握了规律后,对面试的具体情况进行把握 , 有意识地揣摩面试官提出问题的心理背景,然后投其所好 。分析:除非是薪资太低 , 或者是最初的工作,否则不要用薪资作为理由 。“求发展”也被考官听得太多,离职理由要根据每个人的真实离职理由来设计,但是在回答时一定要表现得真诚 。实在想不出来的时候,家在外地可以说是因为家中有事 , 须请假几个月,公司又不可能准假,所以辞职,这个答案一般面试官还能接受 。10、你还有什么问题要问吗?回答提示:企业的这个问题看上去可有可无 , 其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力 。企业不喜欢求职者问个人福利之类的问题 , 如果有人这样问:贵公司对新入公司的员工有没有什么培训项目 , 我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心 。

    推荐阅读