当前位置:文档之家› IOS面试题汇总

IOS面试题汇总

IOS面试题汇总
IOS面试题汇总

IOS面试题汇总

1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和

A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

2.What is advantage of categories? What is difference between implementing a category and inheritance?类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。

3.Difference between categories and extensions?类别和类扩展的区别。答案:category和extensions的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。extensions可以认为是一个私有的Category。

4.Difference between protocol in objective c and interfaces in java?obc中的协议和java中的接口概念有何不同?答案:OBC 中的代理有2层含义,官方定义为formal和informal protocol。前者和Java接口一样。informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。这么看,总觉得类别这玩意儿有点像协议的可选协议。"现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“,现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。

5.What are KVO and KVC?答案:kvc:键- 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。很多情况下可以简化程序代码。

apple文档其实给了一个很好的例子。kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。比如我自定义的一个button[cpp] [self addObserver:self

forKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO - (void)observeValueForKeyPath:(NSString

*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath

isEqualToString:@"highlighted"] ) { [self setNeedsDisplay]; }

}对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。对于kvc机制如何通过key寻找到value:“当通过KVC调用对象时,比如:[self

valueForKey:@”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用-(id) valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException 异常错误。(https://www.doczj.com/doc/a973844.html,注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey 以及_getsomeKey这几种形式。同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存

在。)设计valueForUndefinedKey:方法的主要目的是当你使用

-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“来至cocoa,这个说法应该挺有道理。因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个相关的keypath就行了,可以按照kvc查找的逻辑理解,就说的过去了。

6.What is purpose of delegates?代理的作用?答案:代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。另外一点,代理可以理解为java中的回调监听机制的一种类似。

7.What are mutable and immutable types in Objective C?obc中可修改和不可以修改类型。答案:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。

比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。

8.When we call objective c is runtime language what does it mean?我们说的obc是动态运行时语言是什么意思?答案:多态。主要是将数据类型的确定由编译时,推迟到了运行时。这个问题其实浅涉及到两个概念,运行时和多态。简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方

法。多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。因此也可以说,运行时机制是多态的基础?~~~

9.what is difference between NSNotification and protocol?通知和协议的不同之处?答案:协议有控制链(has-a)的关系,通知没有。首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。因此控制链(has-a 从英语单词大致可以看出,单一拥有和可控制的对应关系。

10.What is push notification?什么是推送消息?

11.Polymorphism?关于多态性答案:多态,子类指针可以赋值给父类。这个题目其实可以出到一切面向对象语言中,因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来。最重要的是转化成自我理解。

12.Singleton?对于单例的理解答案:11,12题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。进一步点,考虑下如何在多线程访问单例时的安全性。

13.What is responder chain?说说响应链答案:事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。因为问的太抽象化了严重怀疑题目出到越后面就越笼统。

14.Difference between frame and bounds?frame和bounds有什么不同?答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)

15.Difference between method and selector?方法和选择器有何不同?答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现.详情可以看apple文档。

16.Is there any garbage collection mechanism in Objective

C.?OBC的垃圾回收机制?答案:OBC2.0有Garbage collection,但是iOS平台不提供。一般我们了解的objective-c对于内存管理都是手动操作的,但是也有自动释放池。但是差了大部分资料,貌似不要和arc机制搞混就好了。求更多~~

17.NSOperation queue?答案:存放NSOperation的集合类。操作和操作队列,基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。网上部分资料提到一点是,虽然是queue,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。这边又有个疑点是,对于队列来说,先进先出的概念是Afunc添加进队列,Bfunc紧跟着也进入队列,Afunc先执行这个是必然的,但是Bfunc是等Afunc完全操作完以后,B才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。但是转念一想其实可以参考银行的取票和叫号系统。因此对于A比B 先排队取票但是B率先执行完操作,我们亦然可以感性认为这还是一个队列。但是后来看到一票关于这操作队列话题的文章,其中有一句提到“因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。”瞬间觉得这个queue名字有点忽悠人了,还不如pool~综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。

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

19.Can we use two tableview controllers on one viewcontroller?是否在一个视图控制器中嵌入两个tableview控制器?答案:一个视图控制只提供了一个View视图,理论上一个tableViewController 也不能放吧,只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController,而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController那样的感觉。

20.Can we use one tableview with two different datasources? How you will achieve this?一个tableView是否可以关联两个不同的数据源?你会怎么处理?答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?

21.Object-c的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?Objective-c只支持单

继承,如果要实现多继承的话,可以通过类别和协议的方式来实现,cocoa 中所有的类都是NSObject 的子类,多继承在这里是用protocol 委托代理来实现的。

22.#import 跟#include 又什么区别#import<>跟#import""又什么区别?答案:@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import而#import比起

#include的好处就是不会引起交叉编译。

23.类变量的@protected ,@private,@public,@package声明各有什么含义?

24.id 声明的对象有什么特性?答案:id是个很重要的类型,是个可以指向任何类型的指针或者可以理解为指向任何未知类型的指针。

25.MVC是什么?有什么特性?为什么在iPhone上被广泛运用?

答案:MVC设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户对其进行编辑。控制器对象是应用程序的视图对象和模型对象之间的协调者。

26.对于语句NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?

27.什么是安全释放?

28.为什么有些4.0独有的objective-c 函数在3.1上运行时会报错.而4.0独有的类在3.1上分配内存时不会报错?分配的结果是什么?29.为什么4.0独有的c函数在3.1的机器上运行不会报错(在没有调用的情况下?)而4.0独有的类名在3.1的机器上一运行就报错?

30.异常exception 怎么捕获?不同的CPU结构上开销怎样?C中又什么类似的方法?

31.property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成get/set方法怎么做?有什么注意事项?

32.委托是什么?委托的property声明用什么属性?为什么?

34.Cocoa中有虚基类的概念么?怎么简洁的实现?

35.自动释放池跟GC(垃圾回收)有什么区别?iPhone上有GC么?[pool release]和[pool drain]有什么区别?iPhone上没有GC。iPhone开发的时候没有垃圾回收机制。在垃圾回收环境中,release 是一个空操作。因此,NSAutoreleasePool提供了drain方法,在引用计数环境中,该方法的作用等同于调用release,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当前的阈值)。因此,在通常情况下,您应该使用drain而不是release 来销毁自动释放池。

36.for(int index = 0; index < 20; index ++){NSString *tempStr = @”tempStr”;NSLog(tempStr);NSNumber *tempNumber =

[NSNumber numberWithInt:2];NSLog(tempNumber);}这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?

37.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

38.在一个对象释放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove这个对象可能会出现什么问题?

39.怎样实现一个singleton的类.给出思路。

40.什么是序列化或者Acrchiving,可以用来做什么,怎样与copy结合,原理是什么?.

41. 线程与进程的区别和联系?答案: 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些

要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

42.在iphone上有两件事情要做,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?为什么?

43.runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的timer事件,touch事件等.

44.ios平台怎么做数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3和Core Data;core data可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。core data提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用core data的时候,你不用安装额外的数据库系统,因为core data 使用内置的sqlite数据库。core data将你app的模型层放入到一组定义在内存中的数据对象。core data会追踪这些对象的改变,同时可以根据需要做相反的改变,例如用户执行撤销命令。当core data在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite 是一个轻量级的嵌入式sql数据库编程。与core data框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。Core

Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型,但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对一、对多的关系。

45.阐述一个nil对象从interface bulider产生,到载入程序运行空间,最后被释放时所经历的生命周期.

47.kvc是什么?kvo是什么?有什么特性?

48.响应者链是什么?

49.unix上进程怎么通信?

UNIX主要支持三种通信方式:

1. 基本通信:主要用来协调进程间的同步和互斥

(1)锁文件通信

通信的双方通过查找特定目录下特定类型的文件(称锁文件)来完成进程间对临界资源访问时的互斥;例如进程p1访问一个临界资源,首先查看是否有一个特定类型文件,若有,则等待一段时间再查找锁文件。

(2)记录锁文件

2. 管道通信:适应大批量的数据传递

3. IPC :适应大批量的数据传递

50.timer的间隔周期准吗?为什么?怎样实现一个精准的timer?

51.UIscrollVew用到了什么设计模式?还能再foundation库中找到类似的吗?(答案众多,不知道哪个是对的~~)

模板(Template)模式,所有datasource和delegate接口都是模板模式的典型应用,

组合模式composition,所有的containerview都用了这个模式

观察者模式observer,所有的UIResponder都用了这个模式。

52如果要开发一个类似eclipse的软件,支持插件结构。且开放给第三方开发。你会怎样去设计它?(大概思路)

53. main()

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);

printf("%d,%d",*(a+1),*(ptr-1));

}

答:2,5

*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2.5,&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int,int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:

&a是数组指针,其类型为int (*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。a是长度为5的int数组指针,所以要加5*sizeof(int)所以ptr实际是a[5],但是prt 与(&a+1)类型是不一样的(这点很重要),所以prt-1只会减去

sizeof(int*),a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

54. 以下为Windows NT下的32位C++程序,请计算sizeof的值

voidFunc ( char str[100] ) { sizeof( str ) =? } void *p = malloc( 100 ); sizeof ( p ) = ?

答案:这题很常见了,Func( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;

在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof( p ) 都为4。

55.- (void)*getNSString(const NSString *inputString)

{ inputString =@"This is a main test\n";

return ;}

-main(void)

{NSString *a=@"Main";

NSString *aString =

[NSStringstringWithString:@"%@",getNSString(a)];

NSLog(@"%@\n", aString);}

最后问输出的字符串:NULL,output在函数返回后,内存已经被释放。

56.列举几种进程的同步机制,并比较其优缺点。

答案:原子操作信号量机制自旋锁管程,会合,分布式系统

进程之间通信的途径

答案:共享存储系统消息传递系统管道:以文件系统为基础

进程死锁的原因

答案:资源竞争及进程推进顺序非法

死锁的4个必要条件

答案:互斥、请求保持、不可剥夺、环路

死锁的处理

答案:鸵鸟策略、预防策略、避免策略、检测与解除死锁

57.堆和栈的区别

管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。

申请大小:栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历

方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出

分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。

58.什么是键-值,键路径是什么?

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

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

59.c和obj-c如何混用

1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp2) 在mm文件中混用cpp直接使用即可,所以obj-c 混cpp不是问题3)在cpp中混用obj- c其实就是使用obj-c编写的模块是我们想要的。如果模块以类实现,那么要按照cpp class的标准写类的定义,头文件中不能出现obj-c的东西,包括#import cocoa的。实现文件中,即类的实现代码中可以使用obj-c的东西,可以import,只是后缀是mm。如果模块以函数实现,那么头文件要按c的格式声明函数,实现文件中,c++函数内部可以用obj-c,但后缀还是mm 或m。总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是obj-c编译后的o文件,这个东西其实是无差别的,所以可以用。obj-c的编译器支持cpp.

60.目标-动作机制

目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参见"插座变量"部分)的形式保有其动作消息的目标。动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现的方法。

程序需要某些机制来进行事件和指令的翻译。这个机制就是目标-动作机制。

61.cocoatouch框架

iPhoneOS 应用程序的基础Cocoa Touch 框架重用了许多Mac 系统的成熟模式,但是它更多地专注于触摸的接口和优化。UIKit 为您提供了在iPhone OS 上实现图形,事件驱动程序的基本工具,其建立在和Mac OS X 中一样的Foundation 框架上,包括文件处理,网络,字符串操作等。

CocoaTouch 具有和iPhone 用户接口一致的特殊设计。有了UIKit,您可以使用iPhone OS 上的独特的图形接口控件,按钮,以及全屏视图的功能,您还可以使用加速仪和多点触摸手势来控制您的应用。

100个iOS开发面试题汇总

100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会。 无论是对于公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,从编程、设计、App Store等各个方面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总。一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备。 常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发?

你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS应用开发流程。 是否熟知CocoaPods?它是什么?如何运行的? 请概括一下你对软件授权的理解,及其对软件开发的影响。 请概括一下你在构建iOS应用时的测试过程。iOS应用如何实现对其他语言、日期格式以及货币单位的支持? 请描述一下Instruments及其作用。 关于iOS技术 请解释一下Handoff是什么,并简述它是如何实现iOS、Mac/网页应用互通的。 iCloud包含了哪些技术与服务? iOS扩展是指?能否列举一些热门或常见的范例? HealthKit是什么? HomeKit是什么?

Apple Pay是什么?能否描述一下如何在应用中使用Apple Pay? 请解释一下iOS应用沙盒机制。 VoiceOver是什么?请举例解释一下iOS中的辅助功能(Accessibility)。开发者如何使用这些功能? iOS应用是如何实现后台多任务处理(Multitasking)的? Game Center针对iOS游戏有哪些功能? iBeacons是什么? Cocoa/Cocoa Touch是什么? 请概括一下Core Audio,Core Data以及Core Location各是什么。它们对iOS应用有何意义? 请描述SpriteKit和SceneKit的作用。 Metal是什么? 响应链(Responder Chain)是什么?它是如何发挥作用的? 按钮和其他控制方式对哪些操作做出回应? AppDelegate扮演着什么样的角色?

【8】IOS面试题--数据存储

1. 什么是谓词? 答案:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件,完成对数据的筛选。 predicate = [NSPredicatepredicateWithFormat:@"customerID == %d",n]; a = [customers filteredArrayUsingPredicate:predicate]; 2. 什么是数据持久化?简单谈一下你所了解的IOS 中的数据持久化的方式。 数据持久化就是将内存中的数据模型转换为存储模型,以及 将存储模型转换为内存中的数据模型的统称.数据模型可以 是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。 在IOS中,少量的数据持久化可以使用属性列表、NSUserDefaults、归档等; 大量的数据持久化可以使用SQLite数据库、CoreData等,也可以使用FMDB第三方类库完成。 2. NSUserDefaults?

NSUserDefaults适合存储轻量级的本地数据,以键值对的形式进行存储,只能存储基本的OC对象(不包括自定义的对象)。 NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。 针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。 NSUserDefaults是典型的单例模式。 3. ProtocolList 属性列表,是一种用来存储串行化后的对象的文件。因为扩展名为plist,因此通常被称为plist文件。 plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,其内容为xml格式。它可以在程序运行期间动态的创建和读写,因此可以用于少量数据时候的数据持久化。 3. 归档?优缺点?

iOS笔试题教学文案

i O S笔试题

iOS笔试题 姓名_________________ 时间____________________ 一、填空题(20题) 1、与alloc对应的方法是,与retain对应的方法是。 2、@property的作用是 , @synthesize的作用是。 3、一个对象的dealloc方法在时被调用。 4、分类(categories)能够向一个已有的类中添加。 拓展(extensions)能够在当前类中增 加。 5、iOS开发者账户中,最多能够添加台设备号。 6、协议(protocal)可以分为两种,其中以关键字申明的协议可以不被实现。 7、是大多数Objective-C类继承的根类,它没有父类。 8、代理(delegate)的作用是。 9、UIViewController的didReceiveMemoryWarning方法在时会调用。 10、MVC模式中,M是指,V是指,C是指。 11、autorelase的作用 是 。 12、 iOS后台运行是在系统版本才开始支持。 13、代码: - (void)setName:(NSString *)newName{ https://www.doczj.com/doc/a973844.html, = newName; } 被调用的结果是。 14、UDID是由位十六进制字符串组成。 15、在KVC中通用的属性访问器方法是和。 16、关键字nil在Objective-C中表示。

17、#import和#include的区别是。 18、在Objective-C中是否支持运算符重载,能否在头文件里申明私有方法。 19、在Instruments工具中,用于检查内存泄露的工具是。 20、在iOS开发环境下,后缀为.a的文件又叫做。 二、单选题(20题) 1、在Objective-C中,类的成员变量默认被申明为:()A:@private B:@protected C:@public D:@package 2、iPhone、iPad、iTouch中使用的架构是()A:arm B:i386 C:x86 D:IA-32 3、下面哪个类在iPhone应用程序开发时不能使用 ( ) A:UITabViewController B:UINavigationController C:UISplitViewController D:UITableViewController 4、关于Objective-C++中的异常处理,下面说法最正确的是 () A:Objective-C不支持异常处理 B:在Objective-C++中,Objective-C的异常处理能够捕获C++的异常 C:在Objective-C++中,Objective-C的异常处理不能捕获到C++的异常 D:在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常 5、在对象的dealloc方法中,关于[super dealloc];语句说法正确的是()A:[super dealloc];有没有没有关系 B:[super dealloc];应该放在dealloc方法内的第一行 C:[super dealloc];应该放在dealloc方法内的最后一行 D:[super dealloc];位置无所谓,只要在dealloc方法里有就可以 6、下面关于方法:[[[object method1] method2] method3:[object method4]];中的method调用顺序是 ( ) A: 1 2 3 4 B: 1 2 4 3 C:4 1 2 3 D: 4 3 2 1 7、iOS开发中,HTTPS通讯是在什么位置来保障安全性()A:NSURLRequest方法里B: NSURLRequest代理方法里 C:NSURLConnection方法里D:NSURLConnection代理方法里 8、关于NSURLConnection同步通讯和异步通讯,下面说法正确的是()A: 同步通讯是指发送数据后,不等接收方回应,接着发下一个数据 B: 异步通讯时会阻塞当前线程 C: 发送同步通讯时,系统会自动创建一个单独的线程

ios面试题锦集(带答案)

iOS 面试题锦集 1.Difference between shallow copy and deep copy??浅复制和深复制的区别?? 答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。?深层复制:复制引用对象本身。?意思就是说我有个A对象,复制一份后得到A_copy 对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不 过是是一个指针,对象本身资源?还是只有一份,那如果我们对A_copy执行了 修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一 个思想。深复制就好理解了,内存中存在了?两份独立对象本身。?用网上一哥们 通俗的话将就是:?浅复制好比你和你的影子,你完蛋,你的影子也完蛋?深复 制好比你和你的克隆人,你完蛋,你的克隆人还活着。 2.What is advantage of categories? What is difference between implementing a category and inheritance??类别的 作用?继承和类别在实现中有何区别? 答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。?并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。?类别主要有3个作用:?(1)将类的实现分散到多个不同文件或多个不同框架中。?(2)创建对私有方法的 前向引用。?(3)向对象添加非正式协议。?继承可以增加,修改或者删除方法, 并且可以增加属性。 3.Difference between categories and extensions??类别和类 扩展的区别。 答案:category和extensions的不同在于后者可以添加属性。另外后者添加的 方法是必须要实现的。?extensions可以认为是一个私有的Category。

黑马程序员IOS面试宝典之iOS性能优化

黑马程序员:IOS面试宝典之iOS性能优化 1. 平时你是如何对代码进行性能优化的? 利用性能分析工具检测,包括静态Analyze 工具,以及运行时Profile 工具,通过Xcode工具栏中Product->Profile可以启动,启动后界面如下 比如测试程序启动运行时间,当点击Time Profiler应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.为了保证数据分析在统一使用场景真实需要注意一定要使用真机,因为此时模拟器是运行在Mac上,而Mac上的CPU往往比iOS设备要快。 为了防止一个应用占用过多的系统资源,开发iOS的苹果工程师门设计了一个“看门狗”的机制。在不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程。开发者们在crashlog里面,会看到诸如0x8badf00d这样的错误代码。 2. 优化Table View 为了保证table view平滑滚动,确保你采取了以下的措施: ?正确使用`reuseIdentifier`来重用cells ?尽量使所有的view opaque,包括cell自身 ?如果cell内现实的内容来自web,使用异步加载,缓存请求结果 ?减少subviews的数量 ?尽量不适用`cellForRowAtIndexPath:`,如果你需要用到它,只用一次然后缓存结果?使用`rowHeight`, `sectionFooterHeight` 和`sectionHeaderHeight`来设定固定的高,不要请求delegate 3. UIImage加载图片 A:imagedNamed初始化 B:imageWithContentsOfFile初始化 imageNamed默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象,并返回这个图片对象. 而imageWithContentsOfFile则仅只加载图片,不缓存. 大量使用imageNamed方式会在不需要缓存的地方额外增加开销CPU的时间来做这件事.当应用程序需要加载一张比较大的图片并且使用一次性,那么其实是没有必要去缓存这个图片的,用imageWithContentsOfFile是最为经济的方式,这样不会因为UIImage元素较多情况下,CPU会被逐个分散在不必要缓存上浪费过多时间. 使用场景需要编程时,应该根据实际应用场景加以区分,UIimage虽小,但使用元素较多问题会有所凸显. 1>不要在?viewWillAppear 中做费时的操作 viewWillAppear: 在view 显示之前被调用,出于效率考虑,在这个方法中不要处理复杂费时的事情;只应该在这个方法设置view 的显示属性之类的简单事情,比如背景色,字体等。要不然,用户会明显感觉到view 显示迟钝。 2>在正确的地方使用reuseIdentifier table view用`tableView:cellForRowAtIndexPath:` 为rows分配cells的时候,它的数据应该重用自UITableViewCell。一个table view维持一个队列的数据可重用的UITableViewCell 对象。

iOS笔试题

iOS笔试题 姓名_________________ 时间____________________ 一、填空题(20题) 1、与alloc对应的方法是,与retain对应的方法是。 2、@property的作用是 , @synthesize的作用是。 3、一个对象的dealloc方法在时被调用。 4、分类(categories)能够向一个已有的类中添加。 拓展(extensions)能够在当前类中增 加。 5、iOS开发者账户中,最多能够添加台设备号。 6、协议(protocal)可以分为两种,其中以关键字申明的协议可以不被实现。 7、是大多数Objective-C类继承的根类,它没有父类。 8、代理(delegate)的作用是。 9、UIViewController的didReceiveMemoryWarning方法在时会调用。 10、MVC模式中,M是指,V是指,C是指。 11、autorelase的作用 是 。 12、 iOS后台运行是在系统版本才开始支持。 13、代码: - (void)setName:(NSString *)newName{ https://www.doczj.com/doc/a973844.html, = newName; } 被调用的结果是。 14、UDID是由位十六进制字符串组成。 15、在KVC中通用的属性访问器方法是和。 16、关键字nil在Objective-C中表示。

17、#import和#include的区别是。 18、在Objective-C中是否支持运算符重载,能否在头文件里申明私有方法。 19、在Instruments工具中,用于检查内存泄露的工具是。 20、在iOS开发环境下,后缀为.a的文件又叫做。 二、单选题(20题) 1、在Objective-C中,类的成员变量默认被申明为:()A:@private B:@protected C:@public D:@package 2、iPhone、iPad、iTouch中使用的架构是()A:arm B:i386 C:x86 D:IA-32 3、下面哪个类在iPhone应用程序开发时不能使用 ( ) A:UITabViewController B:UINavigationController C:UISplitViewController D:UITableViewController 4、关于Objective-C++中的异常处理,下面说法最正确的是 () A:Objective-C不支持异常处理 B:在Objective-C++中,Objective-C的异常处理能够捕获C++的异常 C:在Objective-C++中,Objective-C的异常处理不能捕获到C++的异常 D:在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常 5、在对象的dealloc方法中,关于[super dealloc];语句说法正确的是()A:[super dealloc];有没有没有关系 B:[super dealloc];应该放在dealloc方法内的第一行 C:[super dealloc];应该放在dealloc方法内的最后一行 D:[super dealloc];位置无所谓,只要在dealloc方法里有就可以 6、下面关于方法:[[[object method1] method2] method3:[object method4]];中的method调用顺序是 ( ) A: 1 2 3 4 B: 1 2 4 3 C:4 1 2 3 D: 4 3 2 1 7、iOS开发中,HTTPS通讯是在什么位置来保障安全性()A:NSURLRequest方法里B: NSURLRequest代理方法里 C:NSURLConnection方法里D:NSURLConnection代理方法里 8、关于NSURLConnection同步通讯和异步通讯,下面说法正确的是()A: 同步通讯是指发送数据后,不等接收方回应,接着发下一个数据 B: 异步通讯时会阻塞当前线程 C: 发送同步通讯时,系统会自动创建一个单独的线程

2012年软件评测师下午试题及答案

2012年下半年软件评测师下午试题答案 试题一(共19分)负载压力测试 【说明】 某酒店预订系统有两个重要功能,检索功能和预订功能。检索功能根据用户提供的关键字检索出符合条件的酒店列表,预订功能是对选定的某一酒店进行预订,现需要对该系统执行负载压力测试。 该酒店预订系统的性能要求为: (1)交易执行成功率100%; (2)检索响应时间在3s以内; (3)检索功能支持900个并发用户; (4)预订功能支持100个并发用户; (5)CPU利用率不超过85%; (6)系统要连续稳定运行72小时 【问题1】(3分) 简述该酒店预订系统在生产环境下承受的主要负载类型。 【问题2】(5分) 对系统检索功能执行负载压力测试,测试结果如表1-1所示。请指出响应时间和交易执行成功率的测试结果是否满足性能需求并说明原因。 表1-1 检索功能测试结果 【问题3】(5分) 对系统检索功能及预订功能执行负载压力测试,测试结果如表1-2所示。请指出服务器资源利用情况cpu占用率的测试结果是否满足性能需求并说明原因。 表1-2 系统测试结果 【问题4】(6分) 根据【问题2】和【问题3】的测试结果,试分析该系统的可能瓶颈。 参考答案:

问题1、该酒店预订系统在生产环境下承受的主要负载类型: (1)检索功能、预订功能并发用户的操作是属于并发执行负载; (2)连续运行72小时是属于疲劳强度负载; (3)大量“稿件查询”操作是属于大数据量负载。 【问题4】(5分) 对系统检索功能执行负载压力测试,响应时间和交易执行成功率的测试结果不能满足性能需求。 因为: 1、系统检索功能执行并发用户数为900时,其响应时间为3.7s与检索响应时间在3s以内不能满足性能需求,交易执行成功率为100%满足性能需求。 2、系统检索功能执行并发用户数为1000时,其响应时间为6.6s与检索响应时间在3s以内不能满足性能需求,交易执行成功率为98%不能满足性能100%需求。 【问题4】(6分) 根据【问题2】和【问题3】的测试结果,该系统的存在瓶颈。 服务器资源利用情况: 1在执行检索功能测试时并发用户为900、1000时响应时间超过3s; 2在检索功能并发用户为900,预订功能并发用户数为100时,CPU占用率(%)(平均值)达到87.3超过85%; 3在检索功能并发用户为1000,预订功能并发用户数为120时,CPU占用率(%)(平均值)达到92.6超过85%; 可能的瓶颈如下: (1)服务器CPU 性能不足; (2)数据库设计不足或者优化不够; (3)检索功能预订功能应用软件设计不足或没有优化; (4)网络带宽不足。 试题二(共15分)白盒测试 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 Struct_ProtobufCIntRange{ Intstart_value; Unsigned orig_index; }; typedefstruct_ProtobufCIntRangeProtobufCIntRange; intint_range_lookup(unsigned n_ranges,constProtobufCIntRange*ranges,int value){

iOS面试题库(四)有关GCD——北风网分享

北风网iOS面试题库(四) 写在前面:“分享”看似在输出,但实际上是获得更多。用我们北风网的口号就是“不懂得分享的人,不会很快乐;不懂得分享的教育,不是好教育”。所以,我们北风网会不定期给大家分享一些干货,所有的内容仅供学习之用,也希望大家能将“分享的精神”传递下去。 一、CGD的底层实现 (1)iOS和OS X的核心是XNU内核, GCD是基于XUN内核实现的 (2)GCD的API全部在libdispatch库中 (3)GCD的底层实现主要有Dispatch Queue 和Dispatch Source (4)Dispatch Queue——管理block操作 (5)Dispatch Source——处理事件 二、Notification是同步还是异步?Kvo 是同步还是异步? 包括代理,这些都是同步的;监听和回调都是在同一个线程中执行。 三、Objective C中的selector是什么? 可以理解@selector() 就是取类方法的编号,他的行为基本可以等同C语言中的函数指针,只不过C语言中,可以把函数名之间赋给一个函数指针,而Objective-C的类不能之间应用函数指针,这样只能做一个@selector语法来取。 它的结果是一个SEL类型,这个类型的本质是累方法的编号(函数地址).方法以selector为索引.selector的数据类型是SEL定义成char*,我们可以把它想象成int .每个方法的名字对应

一个唯一的值。 四、iOS中哪些操作是属于私有api的范畴? 私有API是指存放在PrivateFrameworks框架中的API 是苹果明确不能使用的API 也可以说,一般在官方文档和头文件中看不到,但是实际存在于框架中的API 就是私有API,具体在提交应用的时候回自动检测。 私有API的存在很大一部分是为了保护隐私和系统安全,进制开发者使用这些功能。但是由于Objective-C的动态特性,使得实际上不可能存在真正意义的阻止调用这些API。 五、frame和bounds有什么不同? frame的位置是相对父空间的左上角来说的,参照的是父类的坐标系,指的是空间在父控件内的位置和大小。 bounds的位置是相对控件自身的左上角来说的,参照的是自身坐标系,指的是自己本身的大小。 六、NSTimer和GCD的定时器有什么区别? (1)NSTimer 可以调用invalidate 进行撤销,创建和撤销必须在同一线程。 NSTimer需要将定时器添加到当前的runloop中. 它的时间单位是秒。 (2)GCD一旦执行就不能撤销。 CGD中的定时器不受runloop模式的影响。 时间单位是纳秒。

dsp试题及答案集(附复习资料)解析

最新DSP考试试题集合外加复习资料(后) 一、填空(每空1分,共30分) 1.程序计数器的值可以通过复位操作、顺序执行指令、分支转移, 累加器转移,块重复,子程序调用,从累加器调用子程序,中断等操作改变。 2.’C54x DSP芯片采用了6级流水线的工作方式,即一条指令分为预取指、 取指、译码、寻址、读数和执行6个阶段。 3.解决MMR写操作的流水线冲突时,一般可用采用推荐指令和插入空操作 指令的方法。 4.TI公司的定点DSP产品主要有 TMS320C2000 系列、TMS320C5000系列和 TMS320C6000 系列。 5.’C54x DSP中传送执行指令所需的地址需要用到 PAB 、CAB、DAB和 EAB 4条地址总线。 6.在’C54x DSP寻址和指令系统中,Xmem和Ymem表示 16位双寻址操作数, Dmad为16位立即数,表示数据存储器地址,Pmad为16位立即数,表示程序存储器地址。 7.DSP的内部存储器类型可分为随机存取存储器(RAM)和只读存储器(ROM)。 其中RAM又可以分为两种类型:单寻址RAM(SARAM)和双寻址RAM(DARAM)。8. 9.’C54x DSP的内部总存储空间为192K字,分成3个可选择的存储空间:64K 字的程序存储空间、64K字的数据存储空间和64K字的 I/O空间。 10.从功能结构上,’C54X DSP的CPU可以划分成运算部件和控制部件两大 部分。 11.’C54x DSP的寻址方式有七种,分别为立即寻址、绝对寻址、累加器寻址、

直接寻址、间接寻址、存储器映象寄存器寻址、堆栈寻址。 12.’C54x DSP定时器由3个16位存储器映射寄存器组成:定时器寄存器(TIM)、 定时器周期寄存器(PRD)和定时器控制寄存器(TCR)。 13. 主机接口(HPI,Host Port Interface)是TMS320C54x 系列定点芯片内 部具有的一种接口部件,主要用于DSP与其他总线或CPU进行通信。 14.’C54x DSP的指令系统有助记符指令和代数指令两种形式。 15.COFF目标文件中.text段通常包含可执行代码,.data段通常包含己初 始化的数据,.bss段中通常为未初始化的数据保留空间。 16.DSP芯片的开发工具可以分为代码生成工具和代码调试工具两类。 17、DSP芯片按照其用途分类,可以分为通用型和专用型两种。 18,在堆栈操作中,PC当前地址为4020h,SP当前地址为0033h,运行PSHM AR2后,PC= 4021h , SP= 0032h 。(PSHM AR2为单字指令) 19、TMS320C54xDSP芯片四种串行口类型是指 SP 、 BSP 、McBSP和TDMcBSP。 20、请简要说明TMS320C5402VCDSP以下引脚的功能: RS:复位引用脚,IOSTRB: I ef所定义的符号,是在当前模块中 使用,而在别的模块中定义的符号; B、.ref 所定义的符号,是当前模块中定义,并可在别的模块中使用的符号; C、.sect命令定义的段是未初始化的段; D、.usect命令定义的段是未初始化的段。 8、在采用双操作数的间接寻址方式时,要使用到一些辅助寄存器,在此种寻址方式下,下 面的那些辅助寄存器如果使用到了是非法的( D ) A、AR2 B、AR4 C、AR5 D、AR6

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

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。 页脚内容2

史上最全的iOS面试题及答案

史上最全的iOS面试题及答案 以下是为大家整理的史上最全的ios面试题及答案的相关范文,本文关键词为史上,最全,ios,试题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教师教学中查看更多范文。 精品文档 . 史上最全的ios面试题及答案?1.写一个nsstring类的实现 +(id)initwithcstring:(c*****tchar*)nullTerminatedcstring encoding:(nsstringencoding)encoding; +(id)stringwithcstring:(c*****tchar*)nullTerminatedcstring

encoding:(nsstringencoding)encoding { nsstring*obj; obj=[selfallocwithZone:nsDefaultmallocZone()];obj=[objinitwithcstring:n ullTerminatedcstringencoding:encoding]; returnAuToReLeAse(obj); } 2static关键字的作用: (1)函数体内static变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;

(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内; (4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; (5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。 3线程与进程的区别和联系? 精品文档 进程和线程都是由操作系统所体会的程序运行的基本单元,系统

iOS 面试题

iOS 面试题 1、在一个对象的方法里面:https://www.doczj.com/doc/a973844.html,= @“object”;和name =@”object” 有什么不同吗? 答:https://www.doczj.com/doc/a973844.html, =”object”:会调用对象的setName()方法; name = “object”:会直接把object赋值给当前对象的name属性。 2、什么时候用delegate,什么时候用Notification? delegate 和notification 的区别 答: delegate针对one-to-one关系,用于sender接受到reciever的某个功能反馈值。 notification针对one-to-one/many/none,reciver,用于通知多个object某个事件。 区别 1). 二者都用于传递消息,不同之处主要在于一个是一对一的,另一个是一对多的。 2). notification通过维护一个array,实现一对多消息的转发。 3). delegate需要两者之间必须建立联系,不然没法调用代理的方法;notification不需要两者之间有联系。 3.浅拷贝和深拷贝的区别? 浅拷贝:只复制指向对象的指针,而不复制引用对象本身。 深拷贝:复制引用对象本身。内存中存在了两份独立对象本身,当修改A时,A_copy不变。 4.进程和线程的区别?同步异步的区别? 进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 同步:阻塞当前线程操作,不能开辟线程。 异步:不阻碍线程继续操作,可以开辟线程来执行任务。 编程题 30张不同的图片(image0-29)随机选出5张并且不得重复

C++试题(附答案)

一、选择题 1.在下列有关析构函数的描述中,错误的是(B) A.一个类中只能定义一个析构函数 B.析构函数名与类名完全相同 C.析构函数不能指定返回类型 D.析构函数不能带有参数 2.面向对象的软件工程不包括以下哪个部分(D) A.面向对象程序设计 B.面向对象编程C.面向对象维护 D.面向对象封装3.假设定义了函数模版: Template T max(Tx,Ty) {return (x>y)? x:y;} 并定义了:int i;char c;那么下列错误的调用该模版的事(C)A.max (i,i) B.max(c,c) C.max(int(c),i) D.max(c,i) 4.模版的主要作用是为了(C) A.提高代码的运行效率 B.实现多态性C.提高代码的重要性 D.加强类的封装性5.#include #include using namespace std; {

double x=111.222222222222222; cout< { public: void fun (){cout<<”Base::fun”<

信息安全试题库及参考答案

一、判断题 1. 在互联网上第一个注册的域名是“https://www.doczj.com/doc/a973844.html,”。 正确与否均得不了分 2. 当今的信息技术 主要是指计算机和网络通信技术。 正确与否均得不了分 3. 商业软件是指那些需要付费才能使用的软件。 正确与否均得不了分 4. 移动产业链发展趋势是有“流量”经济向“服务”经济转变。 正确与否均得不了分 5. 操作系统是用户与计算机的接口。 正确与否均得不了分 6. 人是安全管理的核心要素 安全管理以提高人的要素为基础 以确保人的安全为终极目标。正确 7. 云计算数据中心规模巨大、能耗惊人 是与当前“节能降耗”的发展目标背道而驰的。错误 8. 伊朗核电站的震网攻击采用的是APT攻击手法。正确 9. 分布式反射拒绝服务攻击就是控制肉鸡发送大量合法请求 导致服务器和网络阻塞。正确 10. 物理隔离的网络是绝对安全的。错误11. 网络好友传输一个图片给你 图片不会感染病毒 可以任意打开。错误 12. 如何确保标签物拥有者的个人隐私不受侵犯成为射频识别技术以至物联网推广的关键问题。正确 13. 在计算机指令中 规定其所执行操作功能的部分称之为操作码。错误 14. 高级程序设计语言的编译系统属于应用软件。错误 15. 物联网一方面可以提高经济效益大大节约成本 另一方面可以为全球经济的复苏提供技术动力。正确 16. 微型计算机的内存储器是指安放在计算机内的各种存储设备。错误 17. 微软的Office 365是云计算服务模型中软件即服务的代表。正确 18. 基于新一代信息技术的节能减排信息化总体架构可以分为四层 分别是基础设施层、信息集成层、应用层和展示层。正确 19. 存贮一个英文字母占8个字节。错误 20. 能够互动、通信的产品都可以看作是物联网应用。错误 21. 目前智能手机操作系统市场占有份额最多的是苹果的ios。错误 22. 诺基亚从没生产国智能手机。错误 23. 现在人们获取媒体的主要方式和手段还是看电视。错误 24. 移动通信最先应用在船舶通信中。正确 25. 企业信息化就是企业内部业务管理的信息化。错误 26. 冯?诺依曼结构的计算机是将计算机划分为运算器、控制器、存储器、输入设备和输出设备等五大部件。错误 27. 计算机发展到第五代出现了个人计算机。错误 28. 微信是中国移动公司开发的。错误 29. 二维码中可以包含很多信息 可以存放恶意程序的链接。正确 30. 绿色电脑是指节能电脑。正确 31. 网络是云计算应用的基础 我国的主流网络速度已经超越了韩国、日本等国家 处于国际领先位置。错误 32. 物联网研究的目的就是把所有物体连接起来。错误 33. “金关”工程又称为海关联网工程 其目标是推广电子数据交换技术 以实现货物通关自动化、国际贸易无纸化。正确

IOS笔试题题目

1. delegate中的property使用以下哪个属性() A. assign B. retain C. copy D. Strong 2. 关于Objective-C中属性的说明,以下错误的是() A.readwrite是可读可写特性,需要生成getter方法和setter方法 B.readonly是只读特性,只有getter方法,没有setter方法 C.assign是赋值属性,setter方法将传入参数赋值给实例变量 D.retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象 3. 下面对category描述不正确的是() A.category可以添加新的方法 B.category可以删除修改之前的方法 C.将类的实现分散到多个不同文件或多个不同框架中 D.创建对私有方法的前向引用 4. NSRunLoop的以下描述错误的是() A.Runloop并不是由系统自动控制的 B.有3类对象可以被run loop监控:sources,timers,observers C.线程是默认启动run loop的 D.NSTimer可手动添加到新建的NSRunLoop中 5. 单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。() A. 对 B. 错 6. 判断:从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。() A. 对 B. 错 7. NSURLConnection类的同步请求方法是() A.+ sendSynchronousRequest:returningResponse:error: B.–initWithRequest:delegate: C.–initWithRequest:delegate:startImmediately: 8. genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile() A.对 B.错 9. 面哪些属于UITableViewDelegate协议的方法() A.tableView:cellForRowAtIndexPath: B.tableView:numberOfRowsInSection: C.tableView:didSelectRowAtIndexPath: D.numberOfSectionsInTableView: 10. 平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容()

iOS 面试题汇总

超全!iOS ?面试题汇总 作者:Job_Yang 之前看了很多?面试题,感觉要不是不够就是过于冗余,于是我将??网上的?一些?面试题进?行了删减和重排,现在分享给?大家。(题??目来源于??网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接?口么?Category是什么?重写?一个类的?方式?用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接?口,通过实现多个接?口可以完成 C++的多重继承;Category是类别,?一般情况?用分类好,?用Category去重写类的?方法,仅对本Category有效,不会影响到其他类与原有类的关系。 2. #import 跟#include ?又什么区别,@class呢, #import<> 跟 #import””?又什么区别? 答:#import是Objective-C导?入头?文件的关键字,#include是C/C++导?入头?文件的关键字,使?用#import头?文件会?自动只导?入?一次,不会重复导?入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执?行时,才去查看类的实现?文件,可以解决头?文件的相互包含;#import<>?用来包含系统的头?文件,#import””?用来包含?用户头?文件。 3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作?用,在那种情况下?用?

1). readwrite 是可读可写特性;需要?生成getter ?方法和setter ?方法时 2). readonly 是只读特性 只会?生成getter ?方法 不会?生成setter ?方法 ;不希望属性在类外改变 3). assign 是赋值特性,setter ?方法将传?入参数赋值给实例变量;仅设置变量时; 4). retain 表?示持有特性,setter ?方法将传?入参数先保留,再赋值,传?入参数的retaincount 会+1; 5). copy 表?示赋值特性,setter ?方法将传?入对象复制?一份;需要完全?一份新的变量时。 6).nonatomic ?非原?子操作,决定编译器?生成的setter getter 是否是原?子操作,atomic 表?示多线程安全,?一般使?用nonatomic 4.写?一个setter ?方法?用于完成@property (nonatomic,retain)NSString *name,写?一个setter ?方法?用于完成@property(nonatomic ,copy)NSString *name 答: 1 2 3 4 5 6 7 8 9 10 11 12- (void) setName:(NSString*) str {[str retain];[name release];name = str;}- (void)setName:(NSString *)str {id t = [str copy];[name release];name = t;} 5.对于语句NSString*obj = [[NSData alloc] init]; obj 在编译时和运?行时分别时什么类型的对象? 答: 编译时是NSString 的类型;运?行时是NSData 类型的对象 6.常?见的object-c 的数据类型有那些, 和C 的基本数据类型有什么区别?如:NSInteger

相关主题
文本预览
相关文档 最新文档