IOS开发常见面试题

来源:互联网 发布:kindle 软件下载 编辑:程序博客网 时间:2024/04/28 20:11

1.解释一下OC中的运行时。
1>runtime是什么:
runtime是一套比较底层的C语言API,属于1个C语言库,包含了很多底层的C语言API;平时编写OC代码,在程序运行过程中,其实最终都转换成了runtime的C语言代码,runtime是OC的幕后工作者。
2>代码举例:
OC:

[[Person alloc] init]

runtime:

objc_msgSend(objc_msgSend("person","alloc"),"init");

3>怎么用:
runtime属于OC的底层,可以进行一些非常底层的操作(用OC无法实现或者不好实现);在程序运行过程中,动态创建一个类(比如KVO的底层实现);在程序运行过程中,动态的添加一个类的属性或方法,修改属性或方法;遍历一个类的所有成员变量或属性或方法。
a.相关的头问价和函数
头文件:
*

#import "ClassName.h"@interface ClassName ( CategoryName ) // method declarations @end

不过到现在为止,Category这个名字看起来仍然让人摸不着头脑——Category的中文是分类和范畴的意思——即便这个动态机制很强大,跟分类有什么关系呢?

这是因为利用这个机制,程序员可以把一堆方法分门别类,分成若干组,每组方法用一个Category名字加以命名,定义在同一个文件里。这个就是为什么把这个机制叫做Category的原因。

注意Category只能用于方法,不能用于成员变量。

理解了Category,Extension就不难理解了。Extension是Category的一个特例,其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

6.利用[UIImage imageNamed:@”icon.png”]存在的问题
利用这种方法在application bundle的顶层文件夹寻找由供应的名字的图像。
如果找到图片,装载到iphone系统的缓存中,此时就意味着图片是放在内存里作为cache的。因此如果图片资源多了或者大了,此方式容易引起内存警告从而导致程序自动退出的问题。
我们可以通过直接读取文件路径[UIImage imageWithContentsOfFile]来解决这个问题,应用示例:
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFiles:path];
注意:imageNamed方法是不能通过路径进行加载图片的,如果通过路径加载图片可以通过下面两个方法加载,一个是URL一个是FilePath
NSImage image = [[NSImage alloc] initWithContentOfURL:(NSURL )];
NSImage image = [[NSImage alloc] initWithContentOfFile:(NSString )];
用完以后[image release];

7.说说进程和线程的区别和联系,ios中有几种实现线程的方法,它们之间有什么区别?
进程是对正在运行的程序过程的抽象,程序本身就代表着一个进程。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程是程序运行的基本单元(可以理解为一个进程中执行的代码片段),进程可以认为是一个容器,里面装的线程真正的在执行代码,完成功能。一个程序在运行的时候就是一个进程,一个进程中至少有一个线程。
ios中线程的实现有三种方式:苹果自带的NSThread、NSOperationQueue、GCD。
使用线程的好处:
a.使用线程可以把程序中占据时间长的任务放到子线程中去处理,如图片、视频的下载。
b.发挥多核处理器的优势,并发让系统运行的更流畅,用户体验更好。
使用线程的缺点:
a.更多地线程需要更多地内存空间。
b.当多个线程对同一资源出现争夺的时候要注意线程安全的问题。

0 0
原创粉丝点击