/**
1.UIButton和UITableView的层级结构
1> 继承结构
UIButton : UIButton : UIControl : UIView : UIResponder : NSObject
UITableView : UITableView : UIScrollView : UIView : UIResponder : NSObject
2> 内部的子控件结构
UIButton : UILabel + UIImageView
UITableView :Cell + 分割线
2.Foundation和CoreFoundation框架对象通过什么关键字进行转换
1> Foundation框架中的数据类型前缀是NS,CoreFoundation的数据类型前缀是CF
2> __bridge
// Foundation框架的字符串
NSString *str = @"哈哈哈";
// CoreFoundation框架的字符串
CFStringRef str2 = (__bridge CFStringRef)str;
// 取得当前安装软件的版本号
NSString *version = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleVersionKey];
3.KVO是什么?内部是怎样实现的?
* KVC : Key Value Coding(健值编码,直接访问成员变量)
[queue setValue:@"abc" forKeyPath:@"name"]; _name\name\setName:
queue.name = @"abc";
* Key Value Observing(健值监听)
可以监听某个对象属性值的改变(监听成员变量值的改变)
1> 添加监听器
// a会监听b的name属性值的改变
[a addObserver:b forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
2> 当b的name属性值改变时,就会调用a的某个方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
4.是否能将比较耗时的操作放在NSNotificationCenter中的处理?为什么?怎么处理?
1> 不能
2> 通知中心所做的操作都是在主线程中执行,主线程中不允许执行比较耗时的操作
3> 将比较耗时的操作放到其他线程中执行(NSThread、NSOperation、GCD)
5.利用NSOperation和NSOperationQueue时,有3个NSOperation分别为A\B\C,要求A\B执行完之后,才执行C,怎么做?
1> 一个NSOpetaion对象封装 一个操作
2> 将NSOpetaion对象放到NSOperationQueue这个队列对象中,就会异步(后台线程,非主线程)执行 NSOpetaion对象封装的操作
3> 设置依赖关系
NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{
}];
NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{
}];
NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{
}];
[c addDependency:a];
[c addDependency:b];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:a]; // 2s
[queue addOperation:b]; // 15s
[queue addOperation:c]; // 5s
6.在非ARC中,可以对某些对象加上autorelease关键字,作用是啥?被autorelease修饰的对象什么时候被释放?
1> 会将这个对象 添加 到 一个自动释放池中,不用再关心这个对象什么时候调用release
2> 对象所在的自动释放池被销毁的时候,对象会做一次release操作,如果这时对象的计数器为0了,就会被释放
7.详细说明app的启动过程,从main.m文件说起,其中有哪些函数,几个参数,作用是啥?
1> 执行main函数
2> main函数内部执行UIApplicationMain函数
3> UIApplicationMain函数有4个参数
* 前2个参数:int argc, char * argv[]是标准C语言main函数参数,交给系统处理即可(运行程序时所附带的参数)
* NSString *principalClassName : 传入UIApplication或者子类的名称,nil默认就是UIApplication
* NSString *delegateClassName : 代理的类名
4> 根据principalClassName创建一个UIApplication对象
5> 根据delegateClassName创建一个代理对象,设置为UIApplication的delegate
6> 开启一个消息循环,监听所有的系统事件(程序启动完毕、程序进入前台、程序进入后台、程序接收内存警告)
7> 监听到对应的事件,就会通知代理,调用代理相应的方法处理系统事件
8> 程序启动完毕后,就会调用代理的application:didFinishLaunchingWithOptions:方法
* 创建窗口
* 设置窗口的根控制器
* 显示窗口(成为主窗口)
8.CAAnimation是做什么的?写一下它的层级结构
* CAAnimation封装一个动画,描述动画的执行过程(动画的时间、具体属性)
* 将一个CAAnimation对象添加一个控件的layer(图层)上,这个layer就会开始执行这个动画
* 继承结构比较复杂,主要的子类有如下几个:
CABasicAnimation
CAKeyframeAnimation
9.iOS7之前,后台执行操作有几种形式?都是什么?
1> music(音乐,多媒体)
2> voip(实时网络连接,后台语音)
3> location(定位)
Info.plist中添加UIBackgroundModes键值
http://bbs.weiphone.com/read-htm-tid-6565487.html
http://club.tgfcer.com/thread-6721943-1-1.html
遇到技术问题:
10.一个有序的序列M,判断其中是否有2个元素A\B的和K?如何判断三个元素A\B\C\的和为K呢?提供思路?
* 遍历
*/