面试

作者: zfl1024 | 来源:发表于2019-04-12 00:30 被阅读0次

    HTTP的请求方式:

    GET、POST、PUT、DELETE、HEAD、OPTIONS

    常见状态:

    200 OK:请求成功,信息在返回的响应报文中

    301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location:首部行中。客户软件将自动获取新的URL

    400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解

    404 Not Found:被请求的文件不在服务器上

    505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
    <4开头的状态码通常是客户端的问题,5开头的则通常是服务端的问题>

    Swift的访问范围:

    1.internal :内部的

     1.1 当不指定具体的访问权限时,默认为internal
     1.2 internal的访问权限: 在当前项目(包)的任何地方都能访问
    

    2.private : 私有的

     private的访问权限: 在当前源文件中能够访问    一个 .swift文件就是一个源文件
    

    3.public :公共的

     3.1 public的访问权限 : 可以跨包访问
     3.2 包的概念: 就是一个项目或一个框架   UIKit也是一个框架
    

    微信支付流程:

    1.请求服务器api生成订单号 2.调支付sdk 3.支付回调里刷服务器的api获取该订单状态。

    那为什么runtime允许动态添加方法和属性,而不会引发问题呢?

    因为方法和属性并不“属于”类实例,而成员变量“属于”类实例。我们所说的“类实例”概念,指的是一块内存区域,包含了isa指针和所有的成员变量。所以假如允许动态修改类成员变量布局,已经创建出的类实例就不符合类定义了,变成了无效对象。但方法定义是在objc_class中管理的,不管如何增删类方法,都不影响类实例的内存布局,已经创建出的类实例仍然可正常使用。
    那么由此分类的作用与局限便清晰了,以下做个总结。
    作用:
    1.分类可以在不获悉,不改变原来代码的情况下往里面添加新的方法,但不能添加实例变量
    2.如果分类和原来类中的方法产生名称冲突,则分类将覆盖原来的方法,因为分类具有更高的优先级

    block用什么修饰? 能不能用strong? retain呢?

    retain在MRC环境下是还是在栈区的,会有问题 strong,retain,copy在arc情况下都会被默认从栈区拷贝到堆区。所以strong也没问题,retain在mrc下有问题。

    缓存分为内存缓存和磁盘缓存两种?有啥区别?

    其中内存是指当前程序的运行空间,缓存速度快容量小,是临时存储文件用的,供CPU直接读取,比如说打开一个程序,他是在内存中存储,关闭程序后内存就又回到原来的空闲空间;磁盘是程序的存储空间,缓存容量大速度慢可持久化与内存不同的是磁盘是永久存储东西的,只要里面存放东西,不管运行不运行 ,他都占用空间!磁盘缓存是存在Library/Caches

    iOS内存分为5个区:栈区,堆区,全局区,常量区,代码区

    栈区stack:

    这一块区域系统会自己管理,我们不用干预,主要存一些局部变量,以及函数跳转时的现场保护。因此大量的局部变量,深递归,函数循环调用都可能导致内存耗尽而运行崩溃。

    堆区heap:

    与栈区相对,这一块一般由我们自己管理,比如alloc,free的操作,存储一些自己创建的对象。

    全局区(静态区static):

    全局变量和静态变量都存储在这里,已经初始化的和没有初始化的会分开存储在相邻的区域,程序结束后系统会释放

    常量区:

    存储常量字符串和const常量

    代码区:

    存储代码

    默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。
    Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
    Library:存储程序的默认设置或其它状态信息;
    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除.
    Library/preferences: 存放的是 user default 存储的信息,iTunes会备份此目录, 应用程序重新启动不会丢弃数据,我们使用 NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,这就是所谓的写到plist中!
    tmp:提供一个即时创建临时文件的地方, iTunes不会备份此目录
    用户生成的文件放在documents,自己的文件放在library/cache里面,简单的说明:如果你做个记事本的app,那么用户写了东西,总要把东西存起来。那么这个文件则是用户自行生成的,就放在documents文件夹里面。如果你有一个app,需要和服务器配合,经常从服务器下载东西,展示给用户看。那么这些下载下来的东西就放在library/cache。apple对这个很严格,放错了就会被拒。主要原因是ios的icloud的同步问题。


    无标题.png

    delegate为什么用weak修饰?

    无标题.png

    如上图所示,根视图强引用着控制器,控制器强引用着view,view强引用delegate,如果delegate用strong修饰,那么delegate就是强引用控制器,会造成三者的强引用,当根视图释放控制器时,由于delegate强引用着控制器,控制器并不会被释放。如果delegate用weak修饰,控制器就会释放。

    相关文章

      网友评论

          本文标题:面试

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