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

iOS面试题四

2016-07-09 11:55 274 查看

iOS面试题四

20.系统如何寻找到需要响应用户操作的那个Responder?

简述一些概念:

响应对象(Responder) - 是具有响应和处理事件能力的对象,UIResponder类是所有响应对象的基类。UIApplication、 UIViewController、UIWindow和所有继承自UIView的UIKit类都直接或间接的继承自UIResponder.

响应链:由响应对象造成的的层次结构。

过程:

通常事件可分成三类,

1 触摸事件(Touch Event)

2 运动事件(Motion Event)- 例如 晃动设备

3远程控制事件(Remote-Control Event)

这里我用触摸事件举例:当iOS检测到触摸事件时会将其打包成一个UIEvent对象,并放入当前活动的Application事件队列中,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的UIWindow来处理,UIWindow对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为hit-test view。UIWindow实例对象会首先在它的内容视图上调用hitTest:withEvent:,此方法会在其调用pointInside:withEvent:(该方法用来判断点击事件发生的位置是否处于当前视图范围内,以确定用户是不是点击了当前视图,如果pointInside:withEvent:返回YES,则继续其所有子视图的hitTest:withEvent:,直到找到touch操作发生的位置

21.如何手动触发一个value的kvo?

观察者需要实现方法 observeValueForKeyPath:ofObject:change:context: 来对KVO发出的通知做出响应。

22.如何对NSArray中的对象去除?

1.利用NSDictionary的AllKeys(AllValues)方法

可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。

示例代码:

NSArray *arr = @[@111,@222,@111];

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

for (NSNumber *number in arr) {

[dict setObject:number forKey:number];

}

NSLog(@”%@”,[dict allValues]);

输出结果为:

2013-05-21 12:03:49.449 test1[4377:c07] (

111,

222

)

2.利用NSSet的AllObjects方法

这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。

示例代码:

NSArray *arr = @[@111,@222,@111];

NSSet *set = [NSSet setWithArray:arr];

NSLog(@”%@”,[set allObjects]);

输出结果为:

2013-05-21 12:06:26.508 test1[4547:c07] (

111,

222

)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 面试题