ios面试题(4)

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

 当您向一个对象发送一个autorelease消息时,Cocoa就会将该对 象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置 时,自动释放池就会被释放,池中的所有对象也就被释放。

1.  ojc-c 是通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.
2.NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.
3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数 减一.

22.类工厂方法是什么

 类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中, 返回被创建的对象,并
进行自动释放处理。这些方法的形式是+ (type)className...(其中 className不包括任何前缀)。

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

类工厂方法的 另一个目的是使类(比如NSWorkspace)提供单件实例。虽 然init...方法可以确认一
个类在每次程序运行过程只存在一个实例,但它需要首先分配一个“生的”实例,然后还必须释放该实例。
工厂 方法则可以避免为可能没有用的对象盲目分配内存。

23.单件实例是什么

Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配 和初始化。 单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果类在概念上只有一个实例(比如
NSWorkspace),就应该产生 一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可
以使用单件实例机制,而不是工厂方法或函数。

24.动态绑定—在运行时确定要调用的方法

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


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

25.obj-c的优缺 点

objc优点:
  1)Cateogies 
  2)Posing 
  3)动态识别
  4) 指标计算 
  5)弹性讯息传递
  6)不是一个过度复杂的C 衍生语言
  7) Objective-C 与 C++ 可混合编程
缺点: 
  1) 不支援命名空間 
  2)  不支持运算符重载 3)不支持多重继承  4) 使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。

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

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

将 src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 '\0',由于拷贝的长度不是由我们自己控制的,所以这个字符串拷贝很容易出错。具备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数,它的函 数原型为memcpy(char *dst, const char* src, unsigned int len);

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

sprintf是格式化函数。将 一段数据通过特定的格式,格式化到一个字符串缓 冲区中去。sprintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,造成溢出。

27. 用变量a给出下面的定义  

a) 一个整型数(An integer)  
b)一 个指向整型数的指针( A pointer to an integer)  
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r  
d)一个有10个整型数的数组( An array of 10 integers)  
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers tointegers)  
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)  
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as anargument
 and returns an integer)  
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers tofunctions t
hat take an integer argumentand return an integer )  
 
答 案是:  
a) int a; // An integer  
b) int*a; // A pointer to an integer  
c) int **a; // A pointer to a pointer to aninteger  
d) int a[10]; // An array of 10 integers  
e) int*a[10]; // An array of 10 pointers to integers  
f) int(*a)[10]; // A pointer to an array of 10 integers  
g) int(*a)(int); // A pointer to a function a that  takes an integer argumentand returns an integer  
h) int (*a[10])(int); // An array of 10 pointers tofunctions  that take an integer argument and return an integer

Iphone基础面试题

1.写一个NSString类的实现

+ (id)initWithCString:(const char *)nullTerminatedCStringencoding:(NSStringEncoding)encoding;

 

+ (id)initWithCString:(const char *)nullTerminatedCStringencoding:(NSStringEncoding)encoding{

       NSString *obj;

       obj = [self allocWithZone:NSDefaultMallocZone()];

       obj = [obj initWIthCString:nullTerminatedCString encoding: encoding];

       return AUTORELEASE(obj);

}

2.写一个委托的interface

答: 

@protocol MyDelegate;

@interface MyClass:NSObject

{

       id <MyDelegate> delegate;

}

// 委托方法

@protocol MyDelegate

- (void)didJobs:(NSArray*)args;

@end 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值