您的位置:首页 > 职场人生

IOS的一些面试知识点

2015-05-13 22:44 253 查看
◆fame,bounds,center,alpha,opaque,hidden

这些都是view的一些基本属性。frame是描述该view在其父视图中的一块区域。其坐标系是在其父视图中的坐标。我们在进行view的初始化时会经常使用到frame。bounds也是描述该view的大小,是其在自身的坐标系中的位置大小。center是描述其在父视图的中心位置坐标。我们在进行view的位置改变而不改变view的大小的时,会使用center。alpha是用来描述改view的透明度从0到1,0表示的是透明,1表示不透明。alpha支持动画(animation),alpha
= 0 与 hidden = YES 效果一样都是看不到view,但是后者相比开销大。在alpha等于0时view接受touch事件,但是hidden则不接受。并且hidden和apaque 不支持动画。alpha并不影响镶嵌在其内部view行为,而hidden会影响。当把view设置为透明背景时,一般把opaque设置为NO,可以减少开销,优化内存.opaque影响图形绘制系统。设置为YES,会优化view的绘制。

◆搞清楚touch事件的传递(事件的响应链)

只有继承了UIResponder的类才能响应touch事件,从上图的响应者链可以看出,优先是最上层的view响应事件,如果该view有视图控制器的话会是下一个响应者,否者就是该view的父视图,这样至上而下传递事件。直到单例UIWindow对象,最后是单例UIApplication对象以终止,UIApplication的下一个响应者是nil,已结束整个响应循环。事件在传递过程中视图可以决定是否需要对该事件进行响应。

事件分发(Event Delivery)

◆nil,NSNULL,NULL区别

nil是指向obj-c中对象的空指针,是一个对象,在o-c中ni对象调用方法不会引起crash。

Nil是指向obj-c中的类的空指针,表示的是一个空类。

NULL是指向任何类型的空指针(如c/c++中的空指针),在objective-c中是一个数值。

NSNULL用于集合操作,在集合对象中,表示一个空值的集合对象。

◆KVC
and KVO

KVC(key-value-coding)键值编码,是一种间接操作对象属性的一种机制,可以给属性设置值。通过setValue:forKey:和valueForKey,实现对属性的存取和访问。

KVO(key-value-observing)键值观察,是一种使用观察者模式来观察属性的变化以便通知注册的观察者。通过注册observing对象addObserver:forKeyPath:options:context:和观察者类必须重写方法 observeValueForKeyPath:ofObject:change:context:。常应用MVC模型中,数据库(dataModal)发生变化时,引起view改变。

◆NSThread,NSOperation,GCD

NSThread,NSOperation,GCD是IOS中使用多线程的三种方式之一。他们各有优缺点。抽象层次是从低到高的,抽象度越高的使用越简单。

NSThread,缺点:需要自己维护线程的生命周期和线程的同步和互斥,但是这些都需要耗费系统的资源。优点:比其它两个更轻。

NSOperation,优点:不需要自己管理线程的生命周期和线程的同步和互斥等。只是需要关注自己的业务逻辑处理,需要和NSOperationQueue一起使用。

GCD,是Apple开发的一个多核编程解决方法,优点:比前面两者更高效更强大。

◆autorelease
,ARC 和非ARC

autorelease 自动释放,与之相关联的是一个自动释放池(NSAutoReleasePool).autorelease的变量会被放入自动释放池中。等到自动释放池释放时(drain)时,自动释放池中的自动释放变量会随之释放。ios系统应用程序在创建是有一个默认的NSAutoReleasePool,程序退出时会被销毁。但是对于每一个RunLoop,系统会隐含创建一个AutoReleasePool,所有的release
pool会构成一个栈式结构,每一个RunLoop结束,当前栈顶的pool会被销毁。

ARC,自动应用计数。(iOS 6加入)IOS内存管理是基于变量的应用计数的。这样系统帮你管理变量的release,retain等操作。

非ARC,非自动应用计数。手动管理内存。自己负责系统变量的release,retain等操作。做到谁分配谁释放,及alloc和release像对应。函数返回对象时使用autorelease。

可以使用Xcode将非ARC转化为ARC,ARC和非ARC混编。可在在编译ARC时使用-fno-objc-arc,-fobjc-arc标签。实际需要看工程是支持还是不支持ARC模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: