面试技巧
当前位置:首页 > 简历范文 > 面试技巧 > 列表页

ios程序员面试技巧

小草范文网  发布于:2016-11-16  分类: 面试技巧 手机版

篇一:iOS开发高级程序员面试题-答案

一、判断题(每题2分,共20分)

1、UITableView能够绑定多个数据源。(错)

2、一个UIViewController可以管理多个UITableView。(对)

3、Object-c的类可以多重继承。(错)

4、objective-c类里面的方法只有两种, 静态方法和实例方法。(对)

5、NSFileManager和NSWorkspace在使用时都是基于进程进行单件对象的实例化。(对)

6、用类别增加方法时,不能与原来类中的方法产生名称冲突。(错)

7、frame指的是该view在本身坐标系统中 的位置和大小。(错)

8、method是一个方法的名字,selector是一个组合体。(错)

9、ARC是编译特性,不是运行时特性,在编译时,编译器会自动加上释放代码。(对)

10、从iOS4之后,Safari支持全屏浏览,Siri支持普通话。(对)

二、填空题(每空2分,共20分)

1、iOS是使用Objective-C语言编写的,使用该语言开发的Cocoa是一款功能强大的用户界面工具包,也是iOS的核心。

2、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。链表恰好相反,其中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

3、发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。而发送异步请求不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。

4、autorelease只是把Object放入了当前的autorelease pool中,当它被释放时,其中的所有Object都会被调用Release。

5、作为Objective-C导入头文件的关键字,#import<>用来包含系统的头文件,#import””用来包含用户头文件。

三、简述题(每题4分,共20分)

1、delegate和notification有什么区别,什么情况下使用?

答:delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,

delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。

通常发送者和接收者的关系是直接的一对多的关系。

notification:消息的发送者告知接收者事件已经发生或者将要发生,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。

2、Object-C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

答:线程创建有三种方法:使用NSThread创建、使用 GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue。

在主线程执行代码,方法是 performSelectorOnMainThread。

如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone。

3、iOS有哪些数据持久化方式?

答:四种:属性列表、对象归档、SQLite3和Core Data。

4、Objective-C如何对内存管理的,说说你的看法和解决方法?

答:Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。解决方法的话:谁持有,谁释放。

5、如何对iOS设备进行性能测试?

答:Profile-> Instruments ->Time Profiler。

四、问答题(每题10分,共20分)

1、什么是MVC,为什么使用MVC,有什么好处?描述一下iOS SDK中如何实现MVC的开发模式。

答:MVC分别为:模型(Model),视图(View)和控制Controller)。

模型(Model):即“数据模型”,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。 视图(View):视图层能够实现数据有目的显示。

控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。 对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是控制层,由它负责控制视图,访问模型数据。

2、请阐述UIViewController的生命周期,包括代码的执行顺序。

答:当一个视图控制器被创建,并在屏幕上显示的时候。代码的执行顺序

// 视图显示在屏幕上的顺序 1、alloc 创建对象,分配空间。 2、init (initWithNibName) 初始化对象,初始化数据。

3、viewload 从nib载入视图, 这一步不需要去干涉。除非没有使用xib文件创建视图。

4、viewDidLoad 加载完毕,可以进行自定义数据以及动态创建其他控件。

5、viewWillAppear 视图将出现在屏幕之前,马上这个视图即将显示在屏幕上。

6、viewDidAppear 视图已在屏幕上渲染完成。

// 视图将被从屏幕上移除的顺序

1、viewWillDisappear 视图将被从屏幕上移除之前执行。 2、viewDidDisappear 视图已经被从屏幕上移除。 3、dealloc 视图被销毁,此时需要在init和viewDidLoad中创建的对象进行释放。

4、viewDidUnload 出现内存警告在内存不足时执行,并对所有非当前显示的controller执行。

本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。

因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

五、论述题(20分)

请针对正泰中自智慧水务APP的需求(见现场展示的原型),论述您的开发思路和使用的开发技术。

篇二:iOS开发高级程序员面试题-试卷

浙江正泰中自控制工程有限公司

iOS开发高级程序员面试卷

(时间:60分钟 总分:100分)

一、判断题(每题2分,共20分)

1、UITableView能够绑定多个数据源。( )

2、一个UIViewController可以管理多个UITableView。( )

3、Object-c的类可以多重继承。( )

4、objective-c类里面的方法只有两种, 静态方法和实例方法。( )

5、NSFileManager和NSWorkspace在使用时都是基于进程进行单件对象的实例化。( )

6、用类别增加方法时,不能与原来类中的方法产生名称冲突。( )

7、frame指的是该view在本身坐标系统中 的位置和大小。( )

8、method是一个方法的名字,selector是一个组合体。( )

9、ARC是编译特性,不是运行时特性,在编译时,编译器会自动加上释放代码。( )

10、从iOS4之后,Safari支持全屏浏览,Siri支持普通话。( ) 二、填空题(每空2分,共20分)

1、iOS是使用语言编写的,使用该语言开发的是一款功能强大的用户界面工具包,也是iOS的核心。

2、访问数组中任何元素。 恰好相反,其中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

3、发送操作。而发送 不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。

4、autorelease只是把Object放入了当前的Object都会被调用

5、作为Objective-C导入头文件的关键字,用来包含用户头文件。

三、简述题(每题4分,共20分)

1、delegate和notification有什么区别,什么情况下使用?

答:

2、Object-C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

答:

3、iOS有哪些数据持久化方式?

答:

4、Objective-C如何对内存管理的,说说你的看法和解决方法?

答:

5、如何对iOS设备进行性能测试?

答:

四、问答题(每题10分,共20分)

1、什么是MVC,为什么使用MVC,有什么好处?描述一下iOS SDK中如何实现MVC的开发模式。

答:

2、请阐述UIViewController的生命周期,包括代码的执行顺序。

答:

五、论述题(20分)

请针对正泰中自智慧水务APP的需求(见现场展示的原型),论述您的开发思路和使用的开发技术。

篇三:iOS面试问题大全

1:Object-c

有多重继承吗?没有的话有什么替代?

我的回答:没有。用

protocol代替

网上答案:cocoa中的所有类都是NSObject的子类。多继承在这里是用protocol委托代理来实现的

2:static作用?

我的答案:静态声明。声明一个变量或方法为静态。静态变量在类的第一次实例化时,即分配存储空间。静态方法不需要类的实例即可访问。

网上答案:

(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此此值在下次调用时扔维持上次的值。

(2)在模块内的static全局变量可以被模块内所用的函数访问,但不能被模块外其他函数访问

(3)在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内

(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝

(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量

4:Object-c的内存管理是如何管理的?

我的答案:

引用计数:当使用alloc创建新实例或赋值retain、copy(或ARC中的strong)标识的变量时,实例或变量的引用计数即加一,当它们的引用计数为0时,则由GC回收

网上答案:如果你通过分配和初始化,(比如[[MyClass alloc] init])的方式类创建对象,你就拥有这个对象,需要负责该对象的释放。这个规则在使用NSObject的便利方法new时也同样适用。如果你拷贝一个对象,你也拥有拷贝得到的对象,需要负责该对象的释放。如果你保持一个对象,你就部分拥有这个对象,需要在不再需要时释放

5:view中的frame和bounds有什么不同?

我的答案:view的frame代表的是父类中的view的位置。view的bounds代表的是view自己的坐标及长宽

网上答案:

frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统) bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统) 6:如何在ios4.1以上使用ios3的代码(这个问题不太明白具体什么意思,按我的理解回答了)?

我的答案:在ARC项目中使用非ARC的代码,需要在编译设置里设置:-fno-objc-arc 7:请写一个委托代理的例子

.h文件

@protocol delegate;

@required

(void)dosomething;

@end

@interface DelegateSimple<delegate>

@end

.m文件

#import "DelegateSimple.h"

@implementation DelegateSimple

(void)dosomething

{

NSLog(@"%@","This is implementation of the protocol");

}

@end

8:请用block写出一个Singleton实例

+(Class *)sharedInstance

{

static Class *__singleton;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

__singleton = [[Class alloc] init];

});

return __singleton;

}

9:请写出你常用的多线程调用的方法

-(void)downloadStringFromURL

{

NSURL *url = [NSURL URLWithString:[NSString stringWithFormart:@"%@", ""]];

ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];

[request setDelegate:self];

[request startAsynchronous];

}

#pragma mark - ASIHTTPRequest异步请求回调方法

(void)requestFinished:(ASIHTTPRequest *)request

{

NSString *responseString = [request responseString];

NSLog(@"%@", responseString);

}

(void)requestFailed

{

NSError *error = [request error];

NSLog(@"%@", error);

}

一 C语言方法的知识

1: const static voilite 修辞变量各代表什么意思?

const 修辞的变量为常量,常量是不容许修改。

static 修辞的变量为静态变量,在内存中只被创建一次(如UItableView 中创建Cell的代理方法 用会用到静态变量标识Cell)

Volatile定义变量为一个共享变量

2: static 的作用

在类中 static 修饰的变量属于整个类的所有,对类的所有对象共享一份

在类中static修辞的方法属于这个类所有,该方法不能通过this来访问 只能通过类来访问该方法。

在函数体 static修辞的变量 在内存中只被分配一次,多次调用函数体都

是调用内存中的同一份。

二OC中内存方面。

1 :OC 中内存管理方式

当对象调用 alloc /retain /copy 的方法时,对象的引用计数器会加1 ,当对象不在使用的时候要调用release/Autorelease将其释放。

2 :release和Autorelease的区别。

当对象调用release的时候 对象的引用计数器减1.

当对象调用Autorelease 对象引用计数器会被系统放在最新的一个自动释放池中,当程序执行作用域外 自动释放池就会被释放此时对象的引用计数会被减1.

3:readwrite readonlyassign retain copy atomic nonatomic的属性作用

readwrite readonly是设置属性访问级别。

assgin 是直接赋值 系统默认的

retain该类想一直持有属性,对象属性计数器会加1

copy对象的拷贝 (当属性是NSString 是对象拷贝时浅拷贝 ,当对象时NSMutableString 对象时深拷贝)

atomic nonatomic 线程访问 nonatomic是非原子访问,不加同步。

4: 深拷贝和浅拷贝的区别。

浅拷贝是指针拷贝对象引用计数加1(如NSString对象调用copy是浅拷贝)

深拷贝在原有对象基础上拷贝出一个新的对象(如NSMutableString对象调用copy是深拷贝)

5: OC中如何管理内存

有2种 第一 手动管理方式第二 ARC 自动管理方式。

三 OC中面向对象

1: 什么是多态

多态子类的指针可以指向父类,调用相同的方法 实现不同的功能。

2:代理的作用

代理 改变或控制传递链。容许一个类在特定的情况下通知其他类来完成某项功能(如应用程序启动完成 会调用applicationDelegate类的方法来监听应用程序的生命周期)

3:类别的作用(category)

类别主要作用可以动态为类扩展新的功能和方法。(如在项目中很多地方都使用文件缓存即 在NSObject中添加一个保存缓存的方法,方便公用)

4: 类别和扩展的区别。

相同点:

类别和扩展都可以动态为类添加新的方法,

不同点:

类扩展可以添加属性,并且类扩展声明的方法都必须实现。

类别 不能添加属性,类别中声明的可以不实现。

5: Object-c 支持多继承吗? 有私有方法和私有变量吗?

Object -c 不支持多继承,可以采用多个协议来实现多继承。

没有私有方法只有类方法和实例方法。

6: 扩展一个类是用继承好还是类别好?

一般使用类别好,不用定义子类 还能直接把类的定义放在不同的文件

里面(如要扩展NSString 的方法最好使用类别)

7: 什么时候用delegate? 什么时候用Notification?

delegate 针对对象一对1

Notification对一对多。

四 OC中的特性:

1:id声明的对象有什么特性?

id 声明的对象具有运行时的特性。声明对象可以指向OC中任何类型的对象。

2:对于NSString * str =[[NSDate alloc ] init ]对象str编译时和运行时的类型区别?

str 编译时 是NSString 运行时 是NSDate

3: KVC和KVO的区别

KVC 键值编码是一种间接访问对象属性的的机制,通过字符串来间接访问属性。 KVO 键值观察模型 当对象属性发生变化 会自动响应对象的指定方法

4: #import和#include的区别,@class代表什么?

@class 用来声明一个类 用来解决同文件相互包含

#import 是OC引入头文件的关键字,

#include 是C语言引入头文件的关键字。

#include引入头文件可能引起重复编译 而#import则不会引起重复编译。

6:堆和栈的区别?

管理方式:

栈上的变量 是由编译器自动管理 不需要手动管理。

堆上的变量 是由程序员手动开辟和释

ios程序员面试技巧

放。

7: id nil Nil的区别?

id 是声明对象具有运行时的特性。可以指向OC对象中的任何类型。

nil 指的对象的指针为空。

Nil 指向空的类。

8:@import<>,@import “” 和@class的区别

@class 用来声明一个类 用来解决同文件相互包含

@import<> 用来导入系统头文件

@import “” 用来导入自定义头文件

9: 方法和选择器有何不同?

selector(方法) 表示方法名称

method 是一个组合体 表示方法名称和实现。

10 :你对@property 和@interface 的理解

@interface 用来声明一个类。

@property 用来声明2个方法 编译器会自动生成 get set方法。 11: OC 语言的优缺点

优点:

1:category

2: C C++ OC 混编。

3: 动态识别

缺点:

1:不支持运算符重载

2:不支持多继承。

五: IOS 生命周期

1:ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?

loadView 是当调用 self.view=nil 会调用loadView方法

viewDidLoad 是当View加载完成后调用该方法。

viewDidUnload是view的视图控制器在window上销毁后调用。

2: 应用程序被打开有几种方法

1: 正常打开

2:本地通知打开程序

3:被另一程序调用打开(程序可以开启微信)

六 IOS中UI部分

1:Frame 和Bounds的区别?

Frame 是子View的坐标相对于View的位置。

Bounds 是自己的坐标系(其中X =0 Y=0)

2: UIView和CALayer的区别?

UIView是ios基本界面基础 所有界面元素都基础UIView上,在UIView内部上绘图部分是由图层来完成。

3: 事件处理过程

当用户触摸在一个View的点时看点是否存在subview 和subview的subview上。

如果同时都存在 事件处理有当前View处理。

如果不是同时存在subview的subview上 触摸点由由最近的一个Subview来处理。

5: UIView的生命周期是什么样的?顺序是怎么样的。

本文已影响