《2022年ios面试题锦集 .pdf》由会员分享,可在线阅读,更多相关《2022年ios面试题锦集 .pdf(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、iOS 面试题锦集1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。?深层复制:复制引用对象本身。? 意思就是说我有个A 对象,复制一份后得到A_copy对象后,对于浅复制来说,A 和 A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源? 还是只有一份,那如果我们对A_copy 执行了修改操作 ,那么发现 A 引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了?两份独立对象本身。?用网上一哥们通俗的话将就
2、是:?浅复制好比你和你的影子,你完蛋,你的影子也完蛋?深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。2.What is advantage of categories? What is difference between implementing a category and inheritance? 类别的作用?继承和类别在实现中有何区别?答案: category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。? 并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。?类别主要有 3 个作用:? (1)将类的实现
3、分散到多个不同文件或多个不同框架中。?(2)创建对私有方法的前向引用。?(3)向对象添加非正式协议。? 继承可以增加,修改或者删除方法,并且可以增加属性。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 28 页 - - - - - - - - - 3.Difference between categories and extensions?类别和类扩展的区别。答案: category 和 extensions 的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的
4、。? extensions 可以认为是一个私有的Category 。4.Difference between protocol in objective c and interfaces in java? obc中的协议和java 中的接口概念有何不同?答案: OBC 中的代理有 2 层含义,官方定义为 formal 和 informal protocol 。前者和 Java 接口一样。? informal protocol 中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。?其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里?“ 非
5、正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。? 这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。?这么看,总觉得类别这玩意儿有点像协议的可选协议。?现在来看,其实 protocal 已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用 interface 修饰“,?现在我们看到协议中两个修饰词:“必须实现(requied) ”和“可选实现(optional)”。5.What are KVO and KVC?答案: kvc:键 - 值编码是一种间
6、接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。?很多情况下可以简化程序代码。 apple 文档其实给了一个很好的例子。? kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。?具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。? 比如我自定义的一个button? cpp self addObserver:self forKeyPath:highlighted options:0 context:nil; #pragma mark KVO- (void)observeValueForKeyPath:(NSString
7、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 28 页 - - - - - - - - - *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context if (keyPath isEqualToString:highlighted ) self setNeedsDisplay; 对于系统是根据 keypath 去取的到相应的值发生改变,理论上来说是和kvc 机制的
8、道理是一样的。?对于 kvc 机制如何通过 key 寻找到 value:? “ 当通过 KVC调用对象时,比如:self valueForKey:”someKey ” 时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有 someKey 这个方法,如果没找到,会继续查找对象是否带有someKey 这个实例变量( iVar),如果还没有找到,程序会继续试图调用 -(id) valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。?( 注:Key-Value Coding查找方法的时
9、候,不仅仅会查找 someKey 这个方法,还会查找getsomeKey 这个方法,前面加一个get,或者_someKey 以及_getsomeKey 这几种形式。同时,查找实例变量的时候也会不仅仅查找 someKey 这个变量,也会查找 _someKey 这个变量是否存在。)?设计 valueForUndefinedKey: 方法的主要目的是当你使用-(id)valueForKey 方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“?来至 cocoa ,这个说法应该挺有道理。? 因为我们知道 button 却是存在一个
10、highlighted 实例变量 .因此为何上面我们只是add 一个相关的 keypath 就行了,?可以按照 kvc 查找的逻辑理解,就说的过去了。6.What is purpose of delegates?代理的作用?答案:代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。?另外一点,代理可以理解为 java 中的回调监听机制的一种类似。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 28 页 - -
11、 - - - - - - - 7.What are mutable and immutable types in Objective C? obc中可修改和不可以修改类型。答案:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。? 比如 NSArray 和 NSMutableArray 。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。8.When we call objective c is runtime language what does it mean? 我们说的obc是动态运行时语言是什么意思?答案:多态。 主要
12、是将数据类型的确定由编译时,推迟到了运行时。?这个问题其实浅涉及到两个概念,运行时和多态。? 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。?多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;? 那人类属于生物,猪也属于生物,都继承了life 后,实现各自的 eat,但是调用是我们只需调用各自的eat 方法。? 也就是不同的对象以自己的方式响应了相同的消息(响应了eat 这个选择器)。?因此也可以说,运行时机制是多态的基础? 9.what is difference between NS
13、Notification and protocol? 通知和协议的不同之处?答案:协议有控制链 (has-a)的关系,通知没有。?首先我一开始也不太明白,什么叫控制链(专业术语了)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解?简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。?代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。?只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理 A 明星要一个发布会,代理人发出处理发布会的消息后,别称B 的? 发布会名师资料总结 - -
14、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 28 页 - - - - - - - - - 了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。? 因此控制链( has-a 从英语单词大致可以看出,单一拥有和可控制的对应关系。10.What is push notification? 什么是推送消息?11.Polymorphism ? 关于多态性答案:多态,子类指针可以赋值给父类。? 这个题目其实可以出到一切面向对象语言中,? 因此关于多态,继承和封装基本最好都有个自我意
15、识的理解,也并非一定要把书上资料上写的能背出来。? 最重要的是转化成自我理解。12.Singleton? 对于单例的理解答案: 11,12 题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。? 基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。? 进一步点,考虑下如何在多线程访问单例时的安全性。13.What is responder chain? 说说响应链答案: 事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。?可以说点事件的分发,传递以及处理。具体可以去看下touch 事件这块。因为问的太抽象化
16、了? 严重怀疑题目出到越后面就越笼统。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 28 页 - - - - - - - - - 14.Difference between frame and bounds? frame 和 bounds有什么不同?答案:frame 指的是:该 view 在父 view 坐标系统中的位置和大小。(参照点是父亲的坐标系统)?bounds 指的是:该 view 在本身坐标系统中的位置和大小。(参照点是本身坐标系统)15.Difference
17、 between method and selector? 方法和选择器有何不同?答案: selector 是一个方法的名字, method 是一个组合体,包含了名字和实现.? 详情可以看 apple 文档。16.Is there any garbage collection mechanism in Objective C.? OBC的垃圾回收机制?答案: OBC2.0 有 Garbage collection ,但是 iOS 平台不提供。?一般我们了解的 objective-c 对于内存管理都是手动操作的,但是也有自动释放池。?但是差了大部分资料,貌似不要和arc 机制搞混就好了。?求更多
18、 17.NSOperation queue?答案:存放 NSOperation 的集合类。?操作和操作队列,基本可以看成java 中的线程和线程池的概念。用于处理ios 多线程开发的问题。?网上部分资料提到一点是,虽然是 queue ,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。?这边又有个疑点是,对于队列来说,先进先出的概念是Afunc 添加进队列, Bfunc 紧跟着也进入队列, Afunc 先执行这个是必然的,?但是 Bfunc 是等 Afunc 完全操作完以后, B 才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。? 但是转念一想其实可以参考银
19、行的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 28 页 - - - - - - - - - 取票和叫号系统。?因此对于 A 比 B 先排队取票但是 B 率先执行完操作,我们亦然可以感性认为这还是一个队列。? 但是后来看到一票关于这操作队列话题的文章,其中有一句提到?“ 因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。”? 瞬间觉得这个 queue 名字有点忽悠人了,还不如pool? 综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。
20、18.What is lazy loading?答案:懒汉模式,只在用到的时候才去初始化。?也可以理解成延时加载。?我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。?一个延时载,避免内存过高,一个异步加载,避免线程堵塞。19.Can we use two tableview controllers on one viewcontroller? 是否在一个视图控制器中嵌入两个tableview 控制器?答案:一个视图控制只提供了一个View 视图,理论上一个tableViewController也不能放吧,?只 能说可以嵌入一个tableview视图。当然,题目本身也有歧义
21、,如果不是我们定性思维认为的UIViewController ,? 而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController?那样的感觉。20.Can we use one tableview with two different datasources? How you will achieve this?一个 tableView 是否可以关联两个不同的数据源?你会怎么处理?答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。?因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据
22、自己的需要去设置如相关的数据源。?因此,我觉得可以设置多个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 28 页 - - - - - - - - - 数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?21.Objectc 的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?Objective-c 只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现, cocoa 中所有的类都是 NSObje
23、ct 的子类,多继承在这里是用protocol 委托代理 来实现的。22.#import 跟#include 又什么区别import 跟 #import又什么区别?答案: class 一般用于头文件中需要声明该类的某个实例变量的时候用到,在m 文 件中还是需要使用 #import 而#import 比起#include 的好处就是不会引起交叉编译。以下没标准答案23.类变量的 protected ,private,public,package声明各有什么含义?()24.id 声明的对象有什么特性?答案: id 是个很重要的类型,是个可以指向任何类型的指针或者可以理解为指向任何未知类型的指针。名
24、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 28 页 - - - - - - - - - 25.MVC 是什么?有什么特性?为什么在iPhone上被广泛运用?答案: MVC 设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表 特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户对其进行编辑。控制器对象是应用程序的视图对象和模型对象之间的协调者。26.对于语句 NSString*
25、testObject = NSData alloc init;testObject 在编译时和运行时分别是什么类型的对象?27.什么是安全释放?28.为什么有些4.0 独有的 objectivec 函数在 3.1 上运行时会报错 .而 4.0 独有的类在3.1 上分配内存时不会报错?分配的结果是什么?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 28 页 - - - - - - - - - 29.为什么 4.0 独有的 c函数在 3.1 的机器上运行不会报错(在没有调用
26、的情况下?)而4.0 独有的类名在3.1 的机器上一运行就报错?30.异常 exception 怎么捕获?不同的CPU结构上开销怎样? C中又什么类似的方法?31.property 中属性 retain,copy,assgin的含义分别是什么?有什么区别?将其转换成getset 方法怎么做?有什么注意事项?32.委托是什么?委托的property 声明用什么属性?为什么?33.浅拷贝和深拷贝区别是什么?. 34.Cocoa中有虚基类的概念么?怎么简洁的实现?35.自动释放池跟GC (垃圾回收)有什么区别?iPhone上有GC么? pool release 和 pool drain有什么区别?i
27、Phone 上没有 GC。iPhone 开发的时候没有垃圾回收机制。在垃圾回收环境中, release 是一个空操作。因此, NSAutoreleasePool提供了drain 方法,在引用计数环境中,该方法的作用等同于调用release ,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 28 页 - - - - - - - - - 前的阈值)。因此,在通常情况下,您应该使用drain 而不是
28、release 来销毁自动释放池。36. for(int index = 0; index ?Bonjour 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 28 页 - - - - - - - - - ?WebKit ?BSD Sockets ?用户应用?Address Book ?Core Location ?Map Kit ?Store Kit 62. objc的内存管理如果您通过分配和初始化(比如MyClass alloc init )的方式来创建对象,您就拥?
29、 有这个对象,需要负责该对象的释放。这个规则在使用NSObject 的便利方法 new 时也同样适用 . 如果您拷贝一个对象,您也拥有拷贝得到的对象,需要负责该对象的释放. 如果您保持一个对象,您就部分拥有这个对象,需要在不再使用时释放该对象。如果您从其它对象那里接收到一个对象,则您不拥有该对象,也不应该释放它(这个规则有少数?的例外,在参考文档中有显式的说明)。63. 自动释放池是什么,如何工作当您向一个对象发送一个autorelease 消息时, Cocoa 就会将该对 象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序
30、执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。1. ojc-c 是通过一种 referring counting( 引用计数 )的方式来管理内存的 , 对象在开始分配内存 (alloc)的时候引用计数为一 ,以后每当碰到有 copy,retain 的时候引用计数都会加一 , 每当碰到 release 和 autorelease 的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.?2. NSAutoreleasePool 就是用来做引用计数的管理工作的 ,这个东西一般不用你管的.?3. autorelease 和 release 没什么区别 ,只是引
31、用计数减一的时机不同而已,autorelease 会在对象的使用真正结束的时候才做引用计数减一. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 28 页 - - - - - - - - - 64. 类工厂方法是什么类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中, 返回被创建的对象,并?进行自动释放处理。这些方法的形式是+ (type)className. (其中 className 不包括任何前缀)。工厂方法可能不仅仅为了方便使用。它们不但可以
32、将分配和初始化合在一起,还可以 为初始化过程提供对?象的分配信息。类工厂方法的另一个目的是使类(比如NSWorkspace )提供单件实例。虽然init.方法可以确认一?个类在每次程序运行过程只存在一个实例,但它需要首先分配一个“生的”实例,然后还必须释放该实例。? 工厂 方法则可以避免为可能没有用的对象盲目分配内存。65. 单件实例是什么Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManager 和 NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候
33、,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配 和初始化。 单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果类在概念上只有一个实例(比如? NSWorkspace ),就应该产生一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可?以使用单件实例机制,而不是工厂方法或函数。66. 动态绑定 在运行时确定要调用的方法动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定 在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑定技术,您的代码每次执行都可以得到不同的结果。运行时因子负责确定消息的接 收者和被
34、调用的方法。运行时的消息分发机制为动态绑定提供支持。当您向一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的 isa 指针定位对象的类,并以此为起点确定被调用的方法,方法和消息是动态绑定的。而且,您不必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。您在每次发送消息时,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 28 页 - - - - - - - - - 特别是当消息的接收者是动态类型已经确定的对象时,动态绑定就会例行而透明地
35、发生。67. obj-c的优缺点objc 优点:? 1) Cateogies 2) Posing 3) 动态识别? 4) 指标计算 5)弹性讯息传递? 6) 不是一个过度复杂的 C 衍生语言? 7) Objective-C 与 C+ 可混合编程?缺点: 1) 不支援命名空間 2) 不支持运算符重载 3) 不支持多重继承 4) 使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。68. readwrite,readonly,assign ,retain,copy,nonatomic 属性的作用?property 是 一个属性访问声明,扩号内支持
36、以下几个属性:?1,getter=getterName,setter=setterName ,设置 setter 与 getter 的方法名? 2,readwrite,readonly,设置可供访问级别? 2, assign ,setter 方法直接赋值,不进行任何 retain 操作,为了解决原类型与环循引用问题?3,retain ,setter 方法对参数进行 release 旧值再 retain新值,所有实现都是这个顺序 (CC 上有相关资料 )? 4,copy ,setter 方法进行 Copy操作,与retain 处理流程一样,先旧值release ,再 Copy出新的对象, ret
37、ainCount为1。这是为了减少对上下文的依赖而引入的机制。?5, nonatomic ,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级 (我是这么理解的 .) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 28 页 - - - - - - - - - 69. ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?(87 题)7
38、0. 谈谈你对ARC 的认识和理解?71. ObjC中,与 alloc语义相反的方法是dealloc还是release?与 retain 语义相反的方法是dealloc还是 release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?alloc 与 dealloc 语意相反, alloc 是创建变量, dealloc 是释放变量。 retain 对应 release,retain 保留一个对象。调用之后,变量的计数加1。或许不是很明显,在这有例为证:- (void) setName : (NSString*) name name retain; mynam
39、e release; myname = name; 我们来解释一下:设想,用户在调用这个函数的时候,他注意了内存的管理,所以他小心的写了如下代码:NSString * newname = NSString alloc initWithString: John; aClass setName: newname; newname release; 我们来看一看 newname 的计数是怎么变化的。首先,它被alloc,count = 1; 然后,在 setName 中,它被 retain, count = 2; 最后,用户自己释放newname ,count = 1 ,myname 指向了 new
40、name 。这也解释了为什么需要调用myname release 。我们需要在给myname 赋新值的时候,释放掉以前老的变量。 retain 之后直接 dealloc 对象计数器没有释放。 alloc 需要与 release 配对名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 28 页 - - - - - - - - - 使用,因为 alloc 这个函数调用之后,变量的计数加1。所以在调用 alloc 之后,一定要调用对应的release 。另外,在 release
41、一个变量之后,他的值仍然有效,所以最好是后面紧接着再var = nil 。72. 在一个对象的方法里面: self.name = “object ”;和name ” object”有什么不同 ? 73. 这段代码有什么问题 : implementation Person - (void)setAge:(int)newAge self.age = newAge; end 74. 什么是 retain count? 75. 以下每行代码执行后,person对象的 retain count 分别是多少Person *person = Person alloc init; person retain;
42、 person release; person release; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 28 页 - - - - - - - - - 76. 为什么很多内置类如UITableViewController 的 delegate属性都是assign而不是 retain 的?77. 定义属性时,什么情况使用copy ,assign ,和 retain?assign 用于简单数据类型,如NSInteger,double,bool,retain 和 co
43、py 用户对象,copy 用于当 a 指向一个对象, b 也想指向同样的对象的时候,如果用assign,a 如果释放,再调用b 会 crash,如果用 copy 的方式, a 和 b 各自有自己的内存,就可以解决这个问题。retain 会使计数器加一,也可以解决assign的问题。另外: atomic 和 nonatomic 用来决定编译器生成的getter 和 setter 是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了 atomic,setter 函数会变成下面这样:if (property != newValue) property release; p
44、roperty = newValue retain; 78. autorelease的对象是在什么时候被release 的?答:autorelease 实际上只是把对 release 的调用延迟了,对于每一个Autorelease ,系统只是把该Object 放入了当前的 Autorelease pool中,当该pool 被释放时,该 pool 中的所有 Object 会被调用 Release 。对于每一个Runloop , 系统会隐式创建一个Autorelease pool ,这样所有的 release pool会构成一个象 CallStack 一样的一个栈式结构,在每一个Runloop 结
45、束时,当前栈顶的 Autorelease pool 会被销毁,这样这个pool 里的每个 Object(就是autorelease 的对象)会被 release。那什么是一个Runloop 呢? 一个 UI 事件,Timer call , delegate call , 都会是一个新的 Runloop 。那什么是一个Runloop呢? 一个 UI 事件, Timer call, delegate call , 都会是一个新的 Runloop 。79. 这段代码有什么问题,如何修改for (int i = 0; i someLargeNumber; i+) NSString *string =
46、”Abc”;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 28 页 - - - - - - - - - string = string lowercaseString; string = string stringByAppendingString:xyz; NSLog( “% ”, string); 80. autorelease 和垃圾回收机制(gc)有什么关系? IPhone OS有没有垃圾回收(gc)?81. Objective C中的 protocal是什么
47、?protocal obj 里面的协议就如同java 里面的 interface 。82. Objective C中的 selector 是什么?你可以理解 selector() 就是取类方法的编号 ,他的行为基本可以等同C 语言的中函数指针 ,只不过 C 语言中,可以把函数名直接赋给一个函数指针,而Objective-C 的类不能直接应用函数指针,这样只能做一个selector 语法来取 .它的结果是一个 SEL 类型。这个类型本质是类方法的编号(函数地址 )。83. Objective C中的 category是什么 ? Objective-C 提供了一个非常灵活的类(Class)扩展机制
48、类别 (Category) 。类别用于对一个已经存在的类添加方法(Methods) 。你只需要知道这个类的公开接口,不需要知道类的源代码。需要注意的是,类别不能为已存在的类添加实例变量(Instance Variables) 。子类(subclassing) 是进行类扩展的另一种常用方法。与子类相比,类别最主要的优点是:系统中已经存在的类可以不需修改就可使用类别的扩展功能。类别的第二大优点是实现了功能的局部化封装。类别定义可以放在一个已存在的类(类 A)的定义文件中 (.h)。这意味着这个类别只有在类A 被引用的前提下才会被外部看到。如果另一个类(类 B)不需要用到类 A 的功能 (没有包含类
49、 A 的.h名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 28 页 - - - - - - - - - 文件),也就不会看到依附类A 存在的类别。 iOS SDK 中广泛运用这种类别定义法来封装功能。84. 什么是 Notification?什么时候用delegate,什么时候用Notification?观察者模式, controller 向 defaultNotificationCenter添加自己的 notification ,其他类注册这个 notificati
50、on 就可以收到通知,这些类可以在收到通知时做自己的操作(多观察者默认随机顺序发通知给观察者们,而且每个观察者都要等当前的某个观察者的操作做完才能轮到他来操作,可以用NotificationQueue的方式安排观察者的反应顺序,也可以在添加观察者中设定反映时间,取消观察需要在 viewDidUnload 跟 dealloc 中都要注销)。delegate 针对 one-to-one 关系,并且 reciever 可以返回值给 sender ,notification 可以针对 one-to-one/many/none,reciever无法返回值给 sender. 所以,delegate 用于