那些被面试过的iOS题目
来源:互联网 发布:mac版枪火兄弟连2 编辑:程序博客网 时间:2024/09/21 09:25
1.创建timer有哪几种方式,有什么区别?CADisplayLink和NSTimer的区别?
2.UITableView那几个代理方法的调用顺序?假设有100个Cell,当前屏幕只能显示10个,调用reloadData后,heightForRow方法会执行多少次?预估高度这个属性是为了解决什么问题而诞生的,它有什么特性?
我测试了一下,测试设备:iphone6,系统8.1和10.0;
我们通过两种创建cell的方式来作为对比:
第一种:
#import "ViewController.h"@interface ViewController ()// 用来测试heightForRow方法的调用次数@property (nonatomic, assign) NSInteger callTimes;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:@"reuseId"]; self.callTimes = 0;}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ NSLog(@"%s", __func__); return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSLog(@"%s", __func__); return 3;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"%s, 这是第%ld个组,第%ld个行的cell", __func__, indexPath.section, indexPath.row); UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseId" forIndexPath:indexPath]; cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld个cell", indexPath.row]; return cell;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ self.callTimes += 1; NSLog(@"%ld,这是第%ld个组,第%ld个行的cell", _callTimes, indexPath.section, indexPath.row); NSLog(@"%s", __func__); return ([UIScreen mainScreen].bounds.size.height - 64) / 2;}
打印结果为:
2016-10-18 14:51:42.719 tableView测试[36378:3706092] -[ViewController numberOfSectionsInTableView:]2016-10-18 14:51:42.719 tableView测试[36378:3706092] -[ViewController tableView:numberOfRowsInSection:]2016-10-18 14:51:42.720 tableView测试[36378:3706092] 1,这是第0个组,第0个行的cell2016-10-18 14:51:42.720 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.720 tableView测试[36378:3706092] 2,这是第0个组,第1个行的cell2016-10-18 14:51:42.720 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.720 tableView测试[36378:3706092] 3,这是第0个组,第2个行的cell2016-10-18 14:51:42.720 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.721 tableView测试[36378:3706092] -[ViewController tableView:cellForRowAtIndexPath:], 这是第0个组,第0个行的cell2016-10-18 14:51:42.721 tableView测试[36378:3706092] 4,这是第0个组,第0个行的cell2016-10-18 14:51:42.721 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.764 tableView测试[36378:3706092] 5,这是第0个组,第0个行的cell2016-10-18 14:51:42.764 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.765 tableView测试[36378:3706092] -[ViewController tableView:cellForRowAtIndexPath:], 这是第0个组,第1个行的cell2016-10-18 14:51:42.765 tableView测试[36378:3706092] 6,这是第0个组,第1个行的cell2016-10-18 14:51:42.765 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:51:42.765 tableView测试[36378:3706092] 7,这是第0个组,第1个行的cell2016-10-18 14:51:42.766 tableView测试[36378:3706092] -[ViewController tableView:heightForRowAtIndexPath:]
在以第二种方式创建cell:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"%s, 这是第%ld个组,第%ld个行的cell", __func__, indexPath.section, indexPath.row); UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseId"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"reuseId"]; } cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld个cell", indexPath.row]; return cell;}
这种方式打印结果为:
2016-10-18 14:45:27.626 tableView测试[36298:3680069] -[ViewController numberOfSectionsInTableView:]2016-10-18 14:45:27.627 tableView测试[36298:3680069] -[ViewController tableView:numberOfRowsInSection:]2016-10-18 14:45:27.627 tableView测试[36298:3680069] 1,这是第0个组,第0个行的cell2016-10-18 14:45:27.628 tableView测试[36298:3680069] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:45:27.628 tableView测试[36298:3680069] 2,这是第0个组,第1个行的cell2016-10-18 14:45:27.628 tableView测试[36298:3680069] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:45:27.628 tableView测试[36298:3680069] 3,这是第0个组,第2个行的cell2016-10-18 14:45:27.629 tableView测试[36298:3680069] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:45:27.630 tableView测试[36298:3680069] -[ViewController tableView:cellForRowAtIndexPath:], 这是第0个组,第0个行的cell2016-10-18 14:45:27.633 tableView测试[36298:3680069] 4,这是第0个组,第0个行的cell2016-10-18 14:45:27.634 tableView测试[36298:3680069] -[ViewController tableView:heightForRowAtIndexPath:]2016-10-18 14:45:27.635 tableView测试[36298:3680069] -[ViewController tableView:cellForRowAtIndexPath:], 这是第0个组,第1个行的cell2016-10-18 14:45:27.635 tableView测试[36298:3680069] 5,这是第0个组,第1个行的cell2016-10-18 14:45:27.635 tableView测试[36298:3680069] -[ViewController tableView:heightForRowAtIndexPath:]
对比之后,我们可以得出结论:
调用顺序: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
而且通过测试发现,通过第一种方式创建的cell在调用- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法时,最后会调用2次。
3.如何用TableView实现CollectionView,或者CollectionView实现tableView?
4.MVC设计模式解决了一个什么问题?
5.dispatch_barrier相关函数的作用?
6.一个View旋转后frame和bounds具体怎么变化的。
7.在A线程中发出的NSNotification在B线程中是否能收到?
8.什么时候子线程要开启NSRunloop,不开启的话会怎么样?(SDWebImage的原理)
http://blog.csdn.net/wzzvictory/article/details/9237973
9.tableView的性能优化有哪几种?什么是离屏渲染?
10.GCD和NSOperation的区别?
———————————— 以上是百度外卖的面试题 ——————————-
https和http的区别?
http://www.cnblogs.com/HedgehogBlog/p/4957561.html
http://www.jianshu.com/p/13c09f4e6fac
TCP/UDP的区别?
get和post的区别?
- 那些被面试过的iOS题目
- Java中被面试官套路过的值传递和引用传递
- 被面试到的一则算法题目: 无序列数组里面,求最长的连续数的长度
- 面试和被面试的经验(二)
- 那些年ios大神用过的神器
- 那些年遇到过的坑之 iOS
- 经验总结帖|那些年,iOS开发踩过的坑
- 那些IOS中你可能使用过的设计模式
- 面试与被面试
- 复制别人的面试和被面试经验的浅谈
- 这几年的面试与被面试总结
- 这几年的面试与被面试总结
- 这几年的面试与被面试总结
- 20101021被面试的一些题(.net)
- 20101022被面试的一些题(.net)
- 20101025被面试的一些题(.net)
- 面试和被面试的经验(一)
- 面试和被面试的经验(一)
- Java线程
- mysql日期时间处理
- 设计模式之行为型模式---策略模式
- fseek函数解释
- Cloudera Manager5配置管理之配置Namenode 的HA
- 那些被面试过的iOS题目
- 无人机技术漫谈
- ReactNative 广告轮播页的实现
- iOS 路径
- sql中用于子查询的几个关键词 any(some是 any的别名),all,in,exists
- MySQL第二天早上第一次连接超时报错,解决方法
- Android实战技巧:Fragment的那些坑
- 装了三天系统和VS
- Java IO流之规律总结