IOS面试题

来源:互联网 发布:cosplay淘宝良心卖家 编辑:程序博客网 时间:2024/04/29 17:34

1,什么是键-值,键路径是什么

答:模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应的属性值。在一个给定的实体中,同一个属性的所有值具有相同的数据类型。键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。

键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。第一个键的性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型实现的方式指定相关对象的性质。通过键路径,您可以指定对象图中的一个任意深度的路径,使其指向相关对象的特定属性.

2,什么是目标-动作机制

目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参见"插座变量"部分)的形式保有其动作消息的目标。虽然目标可以是任何实现恰当的动作方法的Cocoa对象,但通常是您的定制类的一个实例。

动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现的方法。控件,或者更为常见的是它的单元,将动作存储为SEL类型的实例变量。
SEL是一种Objective-C的数据类型,用于指定消息的签名。动作消息必须有一个简单而清楚的签名,消息调用的方法没有返回值,且只有一个类型为id的参数。

目标和动作机制的连接:您可以在程序中设置单元和控件的目标和动作,也可以在Interface Builder中进行。对于大多数的开发者和大多数的使用场合,Interface Builder是更好的方法。当您使用Interface Builder设置控件和目标时,它可以提供视觉上的确认,并且可以支持锁定连接,以及将连接归档到nib文件中。

3,什么是KVC和KVO?

答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。

4,类工厂方法是什么

类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理。这些方法的形式是+ (type)className...(其中 className不包括任何前缀)。工厂方法可能不仅仅为了方便使用。它们不但可以将分配和初始化合在一起,还可以为初始化过程提供对 象的分配信息。 
类工厂方法的另一个目的是使类(比如NSWorkspace)提供单件实例。虽然init...方法可以确认一 个类在每次程序运行过程只存在一个实例,但它需要首先分配一个“生的”实例,然后还必须释放该实例。 工厂方法则可以避免为可能没有用的对象盲目分配内存。 

5,什么是动态绑定

在运行时确定要调用的方法 

动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑定技术,您的代码每次执行都可以得到不同的结果。运行时因子负责确定消息的接收者和被调用的方法。运行时的消息分发机制为动态绑定提供支持。当您向一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点确定被调用的方法,方法和消息是动态绑定的。而且,您不必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。您在每次发送消息时,特别是当消息的接收者是动态类型已经确定的对象时,动态绑定就会例行而透明地发生。

6,obj-c有私有方法么?私有变量呢?

答:在Objective-C中没有私有方法,只有静态方法和实例方法。但是可以用@private修饰私有变量。

7,关键字volatile有什么含意?并给出三个不同的例子?

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

• 并行设备的硬件寄存器(如:状态寄存器)

• 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

• 多线程应用中被几个任务共享的变量


8,What is lazy loading?

答案:懒汉模式,只在用到的时候才去初始化。也可以理解成延时加载。
我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。
一个延时载,避免内存过高,一个异步加载,避免线程堵塞。


9,简述推送流程?

http://www.dapps.net/dev/iphone/ios-push-notification-principle-realization.html


0 1
原创粉丝点击