常见面试题

2017-04-12  本文已影响27人  挨踢的苹果
  1. 在定义属性的时候,assign和strong分别在什么情况下使用
    assign:修饰简单数据类型,比如int,float等,如果基本数据类型用retain修饰,编译器会报错
    可以参看 http://www.jianshu.com/p/4a1d1921284b
    strong:修饰对象,与retain同义,在引用对象的时候,会retain
  2. 写一个单例,并结合实际谈一谈单例的作用
static Singleton* _instance = nil;  
+(instancetype) shareInstance  
{  
    static dispatch_once_t onceToken ;  
    dispatch_once(&onceToken, ^{  
        _instance = [[self alloc] init] ;  
    }) ;  
    return _instance ;  
}  

很多时候,我们在整个app生命周期中要用到全局对象,以协调系统整体的行为,比如,整个系统可能有很多地方会修改、保存以及获取用户信息,这时就可以用单例模式

  1. ++i和i++的区别
int a = 1, b;
b = a++;
// b == 1 加号在后,就赋值后运算
int c = 1, d;
d = ++c;
// d == 2 加号在前,就赋值前运算
  1. #import<>和#import""的却别,import和include的区别
    <>用于系统文件,""用于自己创建的文件;
    import是include的改良版,会确保文件只引用一次
  2. A界面跳转到B,B跳转到C,C跳转到D,如何跳回B?
NSArray *array = self.navigationController.viewControllers;
int i;
for (i=0; i<array.count; i++) {
    UIViewController *vc = array[i];
    if ([vc isKindOfClass:[B class]]) {
        return;
    }
}
B *b = array[i];
[self.navigationController popToViewController:b animated:YES];
  1. frame和bounds的区别
    bounds的x和y永远是0,frame不一定。因为frame描述的是在父视图中的位置,bounds描述的是相对于自己的位置
  2. UITableView加载数据没有显示,以你的经验来看为什么?
    可能是数据源不对,可能是代理没写对,可能是cell有问题
  3. 写出经常用的多线程的代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 费时操作
dispatch_async(dispatch_get_main_queue(), ^{
 // 刷新UI
    });
        });
  1. 如果从后台数据解析出来数据为空值,要如何避免空值造成的崩溃?
    从后台获取的数据一般会解析到写好的model里边,将服务器数据转化成model的时候,就可以进行防灾处理,一般会将空value替换成默认字符串或者指定类型的数据。如果整个数据都是空的,直接则直接使用默认model,提示用户即可。
  2. 说说iOS开发当中常遇到的崩溃以及如何避免。
    永远不要相信服务器,除了养成良好的编码习惯、风格,及时发现隐患外,还要做好防灾处理。Foundation框架里有很多常用的方法有导致崩溃的潜在危险,我们可以将这些方法替换、拦截,以防止崩溃发生,比如:
  1. OC的特点
  1. 内存管理与优化
  1. 沙盒:
    Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
    tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除;iTunes在与iPhone同步时,备份所有的Documents和Library文件;iPhone在重启时,会丢弃所有的tmp文件。
  2. Block
    Block
上一篇下一篇

猜你喜欢

热点阅读