面试问题总结

1、copy,weak,assign,strong,retain 都有什么区别,应用在什么地方

        assign :一般应用于基础类型,oc的基本数据类型NSInteger、CGFloat。C的数据类型int、float、            double、  char、等还用于委托设计模式,防止循环引用,不会更改计数器

        retain:保留计数,获得到了对象的所有权,引用计数在原有基础上+1

        copy:建立一个索引计数为1的对象,然后释放旧对象 。用来复制对象,一般字符串用copy,Foundation中不可变对象使用copy效果相当于retain,只是引用计数+1.

        strong:(强引用)告诉编译器自动帮我们插入retain,

        weak:(弱引用)是普通赋值相当于手动管理内存的assign。

        assign和retain的区别:assign就是直接赋值,从而可能引起1中的问题,当数据为int, float等原生类型时,可以使用assign。retain就如2中所述,使用了引用计数,retain引起引用计数加1, release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。

        copy和retain:copy是创建一个新对象,copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain count为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝。这里指的是NSString,NSNumber等等一类的对象。

        weak 和strong的区别:不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

        retain和strong的区别:在处理用strong声明的Block属性引发的问题时偶然发现的。在诸多教程中都会讲到:声明属性时用strong或者retain效果是一样的(貌似更多开发者更倾向于用strong)。不过在声明Block时,使用strong和retain会有截然不同的效果。strong会等于copy,而retain竟然等于assign!当然定义Block还是应该用copy,因为非ARC下不copy的Block会在栈中,ARC中的Block都会在堆上的。

        assign和weak的区别:weak只可以修饰对象,assign既可以修饰对象也可以修饰基本数据类型,如int、double和NSIntegerdeng 。weak不会产生野指针问题,assign可能导致野指针问题,导致程序崩溃。

        block和weak区别:__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。block对象可以在block中被重新赋值,weak不可以。

2、深拷贝和浅拷贝

        浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址

        深拷贝是真正的复制了一份,复制的对象指向了新的地址

3、响应事件是怎么传递的

        1.触摸屏幕产生触摸事件后,触摸事件会被添加到由UIApplication管理的事件队列中(即,首先接收到事件的是UIApplication)。

        2.UIApplication会从事件队列中取出最前面的事件,把事件传递给应用程序的主窗口(keyWindow)。

        3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件。(至此,第一步已完成)

        4.最合适的view会调用自己的touches方法处理事件

        5.touches默认做法是把事件顺着响应者链条向上抛。

        事件的传递和响应的区别:事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。

4、内购流程

    1.判断内购权限

    2.获得产品购买列表

    3.注册内购监听

    4.实现内购监听

    5.发起内购请求

    6.解析内购数据

   校验:

    1.产品标识符: product Identifier

        在itunes store应用内定义的产品ID,例如com.公司名.产品名.道具名(com.xxxx.video.vip)

    2.交易状态: state

        Purchased购买成功

        Restored恢复购买

        Failed失败

        Deferred等待确认,儿童模式需要询问家长同意

    3. Receipt

        很长的一段字符串,大概49行,作为二次验证的重要依据

    4. 交易标识符: transaction Identifier

        我们需要把Receipt发送給苹果的苹果的服务器验证,用户的购买信息是否真实

        验证服务器地址

        在测试服务器中,发送receipt苹果的测试服务器(https://sandbox.itunes.apple.com/verifyReceipt)验证

        在正式服务器中(已上线Appstore),发送receipt到苹果的正式服务器(https://buy.itunes.apple.com/verifyReceipt)验证

5、ios本地存储分为几种?都是什么?具体作用?

       1. 应用沙盒

        Document:适合存储重要的数据, iTunes同步应用时会同步该文件下的内容,(比如游戏中的存档)

        Library/Caches:适合存储体积大,不需要备份的非重要数据,iTunes不会同步该文件

        Library/Preferences:通常保存应用的设置信息, iTunes会同步

        tmp:保存应用的临时文件,用完就删除,系统可能在应用没在运行时删除该目录下的文件,iTunes不会同步

获取沙盒路径Document:NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentFilePath = paths.firstObject;

6、多线程会用那些,都用什么区别

        NSThread 面向对象的,需要程序员手动创建线程,但不需要手动销毁。子线程间通信很难。

        GCD c语言,充分利用了设备的多核,自动管理线程生命周期。比NSOperation效率更高。

        NSOperation 基于gcd封装,更加面向对象,比gcd多了一些功能。两个概念:操作(NSOperation)和队列(NSOperationQueue)

7、block底层原理是什么

        block本质上也是一个OC对象,它内部也有个isa指针

        block是封装了函数调用以及函数调用环境的OC对象

        block是封装函数及其上下文的OC对象

8、数据存储都有什么区别

    沙盒的的根目录有三个文件夹:Documents,Library,tmp

引用 https://www.jianshu.com/p/f6871fff04b0

9、堆和栈的区别

        因为:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,就是release OC对象存放于堆里面(堆内存要程序员手动回收)非OC对象一般放在栈里面(栈内存会被系统自动回收)堆里面的内存是动态分配的,所以也就需要程序员手动的去添加内存、回收内存

按管理方式分

        对于栈来讲,是由系统编译器自动管理,不需要程序员手动管理

        对于堆来讲,释放工作由程序员手动管理,不及时回收容易产生内存泄露

按分配方式分

        堆是动态分配和回收内存的,没有静态分配的堆

        栈有两种分配方式:静态分配和动态分配

        静态分配是系统编译器完成的,比如局部变量的分配

        动态分配是有alloc函数进行分配的,但是栈的动态分配和堆是不同的,它的动态分配也由系统编译器进行释放,不需要程序员手动管理

        栈是吃了吐 堆是吃了拉

10、动画效果都有什么方式,有什么区别

    1、CABasicAnimation基本动画(fromValue和toValue)

    2、CAKeyframeAnimation关键帧动画:

    3、UIView 代码块调用:

引用  https://www.jianshu.com/p/9a66dbc232e1

你可能感兴趣的:(面试问题总结)