iOS面试之OC基础篇(二)

10.readwrite,readonly,assign,retain,copy,nonatomic属性的作用?

  • readwrite是可读可写特性,需要生成getter和setter方法;
  • readonly是只读特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变;
  • assign是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;assign用于简单数据类型,如NSInteger,double,bool;
  • retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的引用计数retaincount会+1;
  • copy表示赋值特性,setter方法将传入对象赋值一份,需要完全一份新的变量时;
  • nonatomic非原子操作,决定编译器生成的setter getter是否是原子操作;
  • atomic表示多线程安全,一般使用 nonatomic;

11.简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?(重点)

  • KVO(Key-Value-Observing):一对多,观察者模式,键值观察机制,它提供了观察某一属性变化的方法,加大简化了代码;
  • KVC(Key-Value-Coding):是键值编码,一个对象在调用setValue的时候,
    a. 检查是否存在相应的key的set方法,存在就调用set方法;
    b. set方法不存在,就查找_key的成员变量是否存在,存在就直接赋值;
    c. 如果_key没找到,就查找相同名称的key,存在就赋值;
    如果没有就调用valueForUnderfinedKey和setValue: forUndefinedKey;
  • Delegate:通常发送者和接受者是直接一对一的关系,
    a. 代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。
    b. 可以减少框架复杂度,消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然然后发送者响应事件,delegate机制机制使得接收者的行为;
  • Notification:观察者模式,通常发送者和接受者的关系的关系是间接的多对多关系,消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为;
区别:
  • 效率肯定是delegate比NSNotification高;
  • delegate方法比notification更加直接,需要关注返回值,所以delegate方法往往包含should这个很传神的词。相反的,notification最大的特色就是不关心结果,所以notification往往用did这个词;
  • 两个模块之间联系不是很紧密,就用notification传值,例如多线程之间传值用notification;
  • delegate只是一种较为简单的回调,且主要用在一个模块中,例如底层功能完成了,需要把一些值传到上层去,就是事先把上层的函数通过delegate传到底层,然后在底层call这个delegate,它们都在一个模块中,完成一个功能,例如说NavigationController 从B界面到A界面 点击=返回按钮(调用popViewController方法)可以用delegate比较好;

12.懒加载(What is laze loading ?)

  • 就是懒加载只在用到的时候才去初始化,也可以理解成延时加载。一个简单的例子:tableView中图片的加载显示了,一个延时加载,避免内存过高,一个异步加载,避免线程堵塞提高用户体验

13.OC有多继承吗?没有的话可以用什么方法代替?

  • 多继承即一个子类可以有多个父类,它继承了多个父类的特性;
  • Object-c的类没有多继承,只支持单继承,如果要实现多继承的话,可以通过类型别和协议的方式来实现;
    *protocol(协议)可以实现多个接口,通过实现多个接口可以完成多继承;
  • Category(类别)一般使用分类,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系;

14.分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?

  • 类别:在没有原类.m文件的基础上,给该类添加方法;
  • 延展:一种特殊形式的类别,主要在一个类的.m文件里声明和实现延展的作用,就是给某类添加私有方法或是私有变量;
  • 两个的区别:
    a. 延展可以添加属性并且它添加的方法是必须要实现的,延展可以认为是一个私有的类目;
    b. 类别可以在不知道,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改;
    c. 并且如果类别和原来类中的方法名称产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级别;
    d. 继承可以增加,修改删除方法,添加属性;
  • Category只能为对象添加方法,却不能添加成员变量的原因:如果可以添加成员变量,添加的成员变量没有办法初始化;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容