Iphone基础面试题

来源:互联网 发布:用友t3恢复数据在哪里 编辑:程序博客网 时间:2024/05/22 06:26
1,用objective-c写一个插入法排序。

2.写一个NSString类的实现
+ (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;


+ (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding{
    NSString *obj;
    obj = [self allocWithZone: NSDefaultMallocZone()];
    obj = [obj initWIthCString: nullTerminatedCString encoding: encoding];
    return AUTORELEASE(obj);
}

3.写一个委托的interface
答: 
@protocol MyDelegate;
@interface MyClass: NSObject
{
    id <MyDelegate> delegate;
}
// 委托方法
@protocol MyDelegate
- (void)didJobs:(NSArray *)args;
@end

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

5.#import跟#include的区别?
答:前者不会引起交叉编译的问题。因为在Objective-C中会存在C/C++和Object-C混编的问题,如果用include引入头文件,会导致交叉编译。

6.请写出你对MVC模式的理解
答:MVC模式考虑三种对象:模型对象、视图对象和控制器对象。模型对象负责应用程序的数据和定义操作数据的逻辑;视图对象知道如何显示应用程序的模型数据;控制器对象是M与V之间的协调者。

7.什么是键-值,键路径是什么
答:模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应的属性值。在一个给定的实体中,同一个属性的所有值具有相同的数据类型。键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。
键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。第一个键的性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型实现的方式指定相关对象的性质。通过键路径,您可以指定对象图中的一个任意深度的路径,使其指向相关对象的特定属性。

8.c和obj-c如何混用,C++和obj-c呢

9.什么是目标-动作机制

10.请列举你熟悉cocoa touch框架(至少三个)
答:
Core Animation
通过 Core Animation,您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。
Core Audio
Core Audio 是播放,处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能。
Core Data
提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至可处理任何应用或大或小的数据模型。

11.请写出obj-c的内存管理代码

12.自动释放池是什么,如何工作
当您向一个对象发送一个autorelease 消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当 程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
1.  ojc-c 是 通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.
2. NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.
3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一.


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

14.readwrite,readonly,assign,retain,copy,nonatomic属性的作用
@property是一个属性访问声明,扩号内支持以下几个属性:
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出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级。
15.在一个对象的方法里面:
self.name = “object”;

name =”object”;
有什么不同吗? 

16.ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

18.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?
0 0