1、UITableView复用机制:
UITableView通过重用单元格来达到节省内 存的目的:通过为每个单元格指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,以及当单元格滚出屏幕时,允许恢复单元格以便重用。对于不同种类的单元格使用不同的ID,对于简单的表格,一个标识符就够了。
2、OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码?
(1)创建线程的方式:
NSThread、NSOperationQueue(NSOperation)和GCD;
(2)主线程中执行的代码:
• [self performSelectorOnMainThread:(nonnull SEL) withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>];;
• [self performSelector:<#(nonnull SEL)#> onThread:<#(nonnull NSThread *)#> withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>];
• dispatch_async(dispatch_get_main_queue(), ^{
<#code#>
});
(3)执行延时操作:
· double delayInSeconds = 2.0;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
<#code to be executed after a specified delay#>
});
· [self performSelector:<#(nonnull SEL)#> withObject:<#(nullable id)#> afterDelay:<#(NSTimeInterval)#>];
· [NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> repeats:<#(BOOL)#>];
3、KVC和KVO的区别
(1)KVC(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量
(2)KVO(键值观察者)是一种能使得对象获取到其他对象属性变化的通知机制;
(3)实现KVC键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察者观察到。因此KVC是KVO的基础,或者说KVO的实现是建立在KVC的基础之上的。
4、响应者链:
响应链是一个响应者对象的连接序列,事件或动作消息(或菜单编辑消息)依次传递。它允许响应者对象把事件处理的职责转交给其它更高层的对象。
处理原则:
事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象(如果存在),然后是它的父视图(superview)对象(如果存在),以此类推。如果都不能处理,事件被传递到窗口(UIWindow对象)再到程序(UIApplication对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。