美文网首页
常见面试题

常见面试题

作者: 挨踢的苹果 | 来源:发表于2017-04-12 13:11 被阅读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框架里有很多常用的方法有导致崩溃的潜在危险,我们可以将这些方法替换、拦截,以防止崩溃发生,比如:
  • 通过category给类添加方法用来替换掉原本存在潜在崩溃的方法
  • 利用runtime方法交换技术,将系统方法替换成我们给类添加的新方法
  • 利用异常的捕获来防止程序的崩溃,并且进行相应的处理
  1. OC的特点
  • Object-c仅支持单一父类继承,不支持多重继承
  • 所有对象都是指针的形式
  • Category (分类),功能强大,不用通过继承,直接给库类提供函数或者修改库类中的函数
  • 没有命名空间(缺点)
  • 消息机制 在Objective-C中,你可以对id发送任何消息(id很像void*,但是被严格限制只能使用在对象上),编译器仅会发出“该对象可能无法回应消息”的警告,程序可以通过编译,而实际发生的事则取决于运行期该对象的真正形态,若该对象的确可以回应消息,则依旧运行对应的方法。一个对象收到消息之后,他有三种处理消息的可能手段,第一是回应该消息并运行方法,若无法回应,则可以转发消息给其他对象,若以上两者均无,就要处理无法回应而抛出的例外。只要进行三者之其一,该消息就算完成任务而被丢弃。若对“nil”(空对象指针)发送消息,该消息通常会被忽略,取决于编译器选项可能会抛出例外。
  1. 内存管理与优化
  • 关于内存管理的一篇文章:内存管理
  • 可以通过懒加载来减轻内存浪费:关于懒加载
  • 对象已经被释放后,应将其指针置为空指针(没有指向任何对象的指针,给空指针发送消息不会报错)。
  1. 沙盒:
    Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
    tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除;iTunes在与iPhone同步时,备份所有的Documents和Library文件;iPhone在重启时,会丢弃所有的tmp文件。
  2. Block
    Block

相关文章

网友评论

      本文标题:常见面试题

      本文链接:https://www.haomeiwen.com/subject/phroottx.html