厦门IOS培训
达内厦门iOS培训中心

0592-5903858

热门课程

面试参考!iOS技术面试常见题(二)

  • 时间:2018-03-27 18:06
  • 发布:厦门达内
  • 来源:企业面试题

7.自动释放池是什么,如何工作

当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。

它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。

当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。

1.ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一。

以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.

NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.

autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一.

8.类工厂方法是什么

类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理。

这些方法的形式是+ (type)className...(其中 className不包括任何前缀)。

工厂方法可能不仅仅为了方便使用。它们不但可以将分配和初始化合在一起,还可以为初始化过程提供对象的分配信息。

类工厂方法的另一个目的是使类(比如NSWorkspace)提供单件实例。

虽然init...方法可以确认一个类在每次程序运行过程只存在一个实例,但它需要首先分配一个“生的”实例,然后还必须释放该实例。

工厂方法则可以避免为可能没有用的对象盲目分配内存。

9.单件实例是什么

Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。

举例来说,NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。

当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配和初始化。

单件对象充当控制中心的角色,负责指引或协调类的各种服务。

如果类在概念上只有一个实例(比如 NSWorkspace),就应该产生一个单件实例,而不是多个实例;

如果将来某一天可能有多个实例,您可以使用单件实例机制,而不是工厂方法或函数。

10.动态绑定

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

动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定在一起,只有在消实发送出来之后,才确定被调用的代码。

通过动态类型和动态绑定技术,您的代码每次执行都可以得到不同的结果。运行时因子负责确定消息的接收者和被调用的方法。

运行时的消息分发机制为动态绑定提供支持。当您向一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点确定被调用的方法,方法和消息是动态绑定的。

而且,您不必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。

您在每次发送消息时,特别是当消息的接收者是动态类型已经确定的对象时,动态绑定就会例行而透明地发生。

11.obj-c的优缺点

objc优点:

1) Cateogies

2) Posing

3) 动态识别

4) 指标计算

5)弹性讯息传递

6) 不是一个过度复杂的 C 衍生语言

7) Objective-C 与 C++ 可混合编程

缺点:

1) 不支援命名空间

2) 不支持运算符重载

3)不支持多重继承

4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。

12.sprintf,strcpy,memcpy使用上有什么要注意的地方

strcpy是一个字符串拷贝的函数,它的函数原型为strcpy(char dst, c****t char *src);

将 src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 ,由于拷贝的长度不是由我们自己控制的,所以这个字符串拷贝很容易出错。

具备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数,它的函数原型为memcpy(char dst, c***t char src, unsigned int len);

将长度为len的一段内存,从src拷贝到dst中去,这个函数的长度可控。但是会有内存叠加的问题。

sprintf是格式化函数。将一段数据通过特定的格式,格式化到一个字符串缓冲区中去。

sprintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,造成溢出。

上一篇:面试参考!iOS技术面试常见题(一)
下一篇:iOS常见面试题精选

2018最新iOS面试题精选总结

2018年最新iOS面试题及答案

整理2018年iOS面试题

各大企业常见的ios面试题之一

选择城市和中心
贵州省

广西省

海南省