IOS 面试问题

作者: Java酸不酸 | 来源:发表于2017-06-15 17:04 被阅读119次

    HTTP的POST和GET区别?

    http:Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。

    1. 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
    2. 根据HTTP规范,POST表示可能修改变服务器上的资源的请求。

    总结:GET是向服务器发索取数据的一种请求,而POST是向服务器提交数据的一种请求

    使用atomic一定是线程安全的吗?

    1. 这个问题很少遇到,但是答案当然不是
    2. atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值

    总结:atomic有个很大的问题是很慢,要比nonatomic慢20倍。当然最后建议这种数值数值变化可以让服务器来做

    数据库建表的时候索引有什么用?

    有什么用 :数据库中的索引使您可以快速找到表或索引视图中的特定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。索引可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性

    冒泡算法思想

    含有n个元素数组原则上要进行n次排序,从第一个数开始,依次比较前一个数与后一个数的大小。如果前一个数比后一个数大,则进行交换。一轮过后,最大的数将会出现称为最末位的数组元素。第二轮则去掉最后一个数,对前n-1个数在按照以上步骤找出最大数,该数将成为倒数第二的数组元素

    具体代码如下:

    NSMutableArray *number = [NSMutableArray arrayWithObjects:@"53",@"47",@"34",@"98",@"23", nil];
            NSLog(@"排序前:%@",number);
            //比较的趟数
            for (int i = 0; i < 5-1; i++) {
                NSLog(@"\n第%d次:%@",i+1,number);
                //比较的次数
                for (int j = 0; j < 5-1-i; j++) {
                    if ([number[j] integerValue] > [number[j+1] integerValue]) {
                        //根据比升序排序
                        NSInteger temp = [number[j] integerValue];
                        number[j] = number[j+1];
                        //将string转化成对象
                        number[j+1] = [NSString stringWithFormat:@"%ld",temp];
                    }
                    NSLog(@"\n第%d次%d趟:%@",i+1,j+1,number);
                }
            }
            NSLog(@"排序后:%@",number);
        }
    

    iOS里如何做数据持久化?

    所谓数据持久化,就是将数据保存在硬盘当中,使得数据可以在应用程序启动后继续访问之前保存的数据。又以下几种方式:

    1. plist文件(例:天气城市列表)
    2. sqlite 数据库
    3. coredata 苹果自带数据库 (封装了sqlite数据库,使用对象对sqlite进行操作)
    4. NSUserDefaults(preference 偏好设置)轻量保存数据
    5. NSKeyeArchiver(归档)

    Objective-C的类可以多重继承吗? 可以实现多个接口吗?category是什么?

    Objective-C不能多重继承;可以实现多个接口,通过多个接口可以实现多重继承;category是类别,一般情况用分类好,用category仅对本类有效。

    #import 跟 #include的区别?@class呢?#import" " 跟 #import< >有什么区别?

    1. import是oc导入头文件的关键字
    2. include是c/c++导入头文件的关键字
    3. @class是告诉编译器某个类的申明,当执行时才去查看类的实现文件,可以解决头文件的相互包含
    4. import< >是用来包含系统文件头文件
    5. import" "是用来包含用户头文件

    什么情况下使用weak和assign,有何不同

    1. assign是指针赋值,不对引用计数操作,使用之后如果没有设置nil,可能就会产生(野)指针
    2. weak一旦不进行,则不会再使用,就不会产生野指针

    项目里什么时候选择GCD,什么时候选择NSOperation项目中使用

    1. NSOperation的优点是对线程的高度抽象,在项目中使用它,使项目结构更好,子类化NSOperation的设计思路,使具有面向对象的优点(复用,封装),使得线程在项目中使用简单,简易在复杂项目中使用
    2. GCD的优点是使用起来非常简单、易用对于不复杂的多线程操作,会节省代码量,而block参数使用,使代码更易读

    UIView和CALayer的关系

    UIView是依赖于CALayer提供的内容,CALayer依赖于UIView提供的界面绘制内容。CALayer是这一切的基础,如果没有CALayer,UIView也不会存在;UIView是一个特殊的CALayer实现,添加了响应事件能力

    结论:UIView来自CALayer,高于CALayer,UIView所有特性来源于CALayer的支持

    沙盒

    1. 应用程序可以在自己的沙盒里面运作,但是不能访问其他的应用程序沙盒
    2. 应用程序之间不能共享数据,沙盒里面文件不能被复制到其他文件中
    3. 沙盒有三个目录文件夹
      • Documents:一般应该把应用程序的数据写到这里,用于存储应用程序数据
      • Library:下有两个文件夹:
        • Caches存储应用程序再次启动所需的信息
        • Preferences包含应用程序偏好设置文件
      • Temp:存放临时文件,即应用程序再次启动不需要的文件

    连接静态库

    静态库是程序代码的集合,共享代码的一种方式,静态库是闭源形式的存在的.a和.framework连接时,静态库文件会被复制到可执行文件中,被多次使用就会有冗余拷贝,相当于java中的jar包,把一类编译到一个包中

    打包程序

    在开始将程序提交到App Store之前,需要一个App Store账号,一个有效的发布证书,以及app描述文件

    在itcunesconnect网站上,创建app应用,设置对应信息,上传app打包文件提交等待审核

    MVC设计模式

    顾名思义:Model、View、Controller

    优点:

    1. 开发人员只用关注整层结构中某一层
    2. 降低层与层之间的依赖
    3. 降低层与层之间的依赖
    4. 利于各层逻辑的复用

    缺点:降低了系统性能,如不采用分层式结构,很多业务可以直接访问数据库获取数据,现在必须通过中间层来完成

    代理的作用

    代理的目的是改变或传递控制链。允许一个类在某些特定时候通知到其他类,而不需要获取到那些指针,以减少框架的复杂度

    相关文章

      网友评论

        本文标题:IOS 面试问题

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