IOS面试题一

来源:互联网 发布:天津大学 陈老师 知乎 编辑:程序博客网 时间:2024/05/21 07:51

ios面试题一

1. 浅复制和深复制的区别?
  答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。
  深层复制:复制引用对象本身。
  意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
  还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了
  两份独立对象本身。
2.iOS本地数据存储都有哪几种方式?
NSKeyedArchiver   
 NSUserDefaults
Write写入方式
 SQLite3
3.如何浅拷贝与深拷贝的理解4
所谓浅拷贝是指只复制指向对象的指针,而不复制引用对象本身(同一份内存),而所谓深拷贝是指复制引用对象本身(新创建了一份内存)。

4. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?
  答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。
5.描述一下iOS SDK中如何实现MVC的开发模式
        MVC是Model-VIew-Controller,就是模型-视图-控制器, MVC把软件系统分为三个部 分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不 属于另外两个。model数据模型,view是对这些数据的显示,viewcontroller就是把model拿到view中显示,起到model和 view之间桥梁的作用。MVC可以帮助确保帮助实现程序最大程度的可重用性。各MVC元素彼此独立运作,通过分开这些元素,可以构建可维护,可独立更新 的程序组建, 提高代码的重用性.
6. frame和bounds有什么不同?
  答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
  bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
6. 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画?
  答案:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理Block指令)
  [UIView transitionWithView:self.view
  duration:0.2
  options:UIViewAnimationOptionTransitionFlipFromLeft
  animations:^{ [[blueViewController view] removeFromSuperview]; [[self view] insertSubview:yellowViewController.view atIndex:0]; }
  completion:NULL];
7. block 实现原理
  Objective-C是对C语言的扩展,block的实现是基于指针和函数指针。
  从计算语言的发展,最早的goto,高级语言的指针,到面向对象语言的block,从机器的思维,一步步接近人的思维,以方便开发人员更为高效、直接的描述出现实的逻辑(需求)。
  下面是两篇很好的介绍block实现的博文
  iOS中block实现的探究
  谈Objective-C Block的实现
  3 block的使用
  使用实例
  cocoaTouch框架下动画效果的Block的调用
  使用typed声明block
  typedef void(^didFinishBlock) (NSObject *ob);
  这就声明了一个didFinishBlock类型的block,
  然后便可用
  @property (nonatomic,copy) didFinishBlock finishBlock;
  声明一个blokc对象,注意对象属性设置为copy,接到block 参数时,便会自动复制一份。
  __block是一种特殊类型,
  使用该关键字声明的局部变量,可以被block所改变,并且其在原函数中的值会被改变。

8 常见系列面试题
  面试时,面试官会先问一些,是否了解block,是否使用过block,这些问题相当于开场白,往往是下面一系列问题的开始,所以一定要如实根据自己的情况回答。
  1 使用block和使用delegate完成委托模式有什么优点?
  首先要了解什么是委托模式,委托模式在iOS中大量应用,其在设计模式中是适配器模式中的对象适配器,Objective-C中使用id类型指向一切对象,使委托模式更为简洁。了解委托模式的细节:
  iOS设计模式—-委托模式
  使用block实现委托模式,其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑;
  适配对象不再需要实现具体某个protocol,代码更为简洁。
  2 多线程与block
  GCD与Block
  使用 dispatch_async 系列方法,可以以指定的方式执行block
  GCD编程实例
  dispatch_async的完整定义
  void dispatch_async(
  dispatch_queue_t queue,
  dispatch_block_t block);
  功能:在指定的队列里提交一个异步执行的block,不阻塞当前线程
  通过queue来控制block执行的线程。主线程执行前文定义的 finishBlock对象
  dispatch_async(dispatch_get_main_queue(),^(void){finishBlock();});
8.沙盒的目录结构是怎样的?各自一般用于什么场合?
    •    Application:存放程序源文件,上架前经过数字签名,上架后不可修改
    •    Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目 录。例如,游戏应用可将游戏存档保存在该目录
    •    tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用 没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
    •    Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份 该目录。⼀一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下
    •    Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应⽤会在该目录中查找应⽤的设置信息。iTunes同步设备时会备份该目录
9. __block和__weak修饰符的区别?
    •    __block不管是ARC还是MRC模式下都可以使用,它的作用是标识block外的变量在block内使用可以修改变量的值。
    •    __weak只能在ARC模式下使用,表示弱引用,主要是用于防止循环引用而引入的。
10. 常见的Http状态码有哪些?:
    •    302是请求重定向。
    •    500及以上是服务器错误,如503表示服务器找不到、3840表示服务器返回无效JSON。
    •    400及以上是请求链接错误或者找不到服务器,如常见的404。
    •    200及以上是正确,如常见的是200表示请求正常。
    •    100及以上是请求接受成功。


1 0