• 14 OC的理解和特性

    • OC作为一个面向对象的语言,他也就具有面向对象的特点-封装,继承,多态。

    • OC是一门动态性的语言,他具有动态绑定,动态加载,动态类型。动态即就是在运行时才会做的一些事情。

    • 动态类型-即运行时才决定对象的类型,简单来说,就是id类型,他可以存储任意类型的变量,他自己本身就相当于指针,类似于void*。

    • 静态类型和动态类型--

      • 编译期间检查和运行时检查

      • 静态类型在编译期间就能检查出错误,静态类型声明代码可读性良好,动态类型只有在运行时才能发现错误。

    • 动态绑定-程序直到执行时才知道执行哪个方法,动态绑定需要做的,即就是在实例所属类确定后,将某些属性和方法绑定到实例上。

    • SEL是类方法方法的指针,他就相当于C语言中的中函数指针。SEL class_func = @selector(),OC类里面的方法都是被转换成SEL变量进行存储的,当类声明一个对象,对象调用方法时,系统会将这个方法转换成SEL,然后拿这个SEL在类方法中进行查找,我们可以手动将方法转换为SEL,然后用SEL去查找方法(performSelector)。

    • 动态加载-根据需求加载相应的资源,在iOS开发中,主要是做屏幕的适配。

  • 15 如何理解MVC设计模式

    • M指的是model层,它主要是进行一些数据的收集和存储。

    • V指的是view层,它主要是来展示一些UI方面的东西,比如说布局界面。

    • C指的是ViewController,他主要有一些业务逻辑的算法,还有一些功能的设计,Controller负责把model层的数据展示在view层,但是view层不能直接和Controller交互,这样,就需要用到代理或者Block了,model层和view层不能直接进行交互。

  • 16 如何理解MVVM模式。

    • V层指的是viewController层,从viewModel层或得数据,然后展示。

    • VM指的是viewMOdel,他是model和V层的粘合剂,说实在的,就是把MVC中ViewController中的一些业务逻辑和功能模块给抽出来。

  • 17 协议的基本概念和默认的类型

    • 协议就是一些方法,但是仅仅只是声明这些方法,但是没有实现,他可以被任意类使用,但是他并不是类,协议分为非正式协议和正式协议,非正式协议是NSObject的类别。

    • 协议的用法,当一个类遵循一个协议时,如果协议中的方法使用@optional修饰时,表示这个方法可以实现也可以不实现,但是要是使用@required修饰的话,说明这个类必须要实现这个方法。

    • 默认类型是@required,必须要实现的。

  • 18 什么是单例,单例的写法

    • 单例模式在他的核心结构中只包含一个叫单例的特殊类,他只有一个实例对象并且易于外部访问,从而实现对实例个数的控制,并且减少系统资源,如果想要实现实例对象只有一个,那么单例模式是你最好的选择。

    • 单例创建步骤

      • 创建一个类方法,名字以shared,default current开头。

      • 创建一个全局变量来保存对象的引用。

      • 判断该对象是否存在,如果没有则创建。

    • 单例写法。

      • 非线程安全的单例

         		/**
        * 非线程安全的单例
        *
        * @return
        */
        + (instancetype)defaultPerson
        {
        //创建一个全局变量,以保存对象的引用
        static Person *person = nil; if (person == nil) { person = [[self alloc]init];
        }
        return person;
        }
      • 线程安全单例写法1 - 加了一个互斥锁

          		+ (instancetype)defaultPerson
        {
        static Person *person = nil; @synchronized(self) { if (person == nil) { person = [[self alloc]init];
        }
        }
        return person;
        }
      • 线程安全单例写法2

          		+ (void)initialize
        {
        static Person *person = nil; if([self class] == [Person class])
        {
        person = [[Person alloc]init];
        } }
      • 线程安全单例写法3 -- GCD,苹果推荐的

          		+ (instancetype)defaultPerson
        {
        static Person *person = nil; static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{ person = [[self alloc]init];
        });
        return person;
        }
  • 19 load方法和initialize方法的区别

    • load方法:

      • 当类被引用进程序的时候会执行这个函数
      • 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前。
      • Category的load也会收到调用,但顺序上在主类的load调用之后。
    • initialize方法:

      • initialize的自然调用是在第一次主动使用当前类的时候
      • 和load不同,即使子类不实现initialize方法,会把父类的实现继承过来调用一遍。注意的是在此之前,父类的方法已经被执行过一次了,同样不需要super调用。
    • load和initialize有很多共同特点,下面简单列一下:

      • 在不考虑开发者主动使用的情况下,系统最多会调用一次
      • 如果父类和子类都被调用,父类的调用一定在子类之前
      • 都是为了应用运行提前创建合适的运行环境
      • 在使用时都不要过重地依赖于这两个方法,除非真正必要
  • 20 简述类目Category优点和缺点

    • 优点

      • 不要要增加子类就可以给现有类增加方法。

      • 通过类目可以对一个类的方法进行划分,有益于代码的维护,管理,提高代码的可阅读性。

      • 如果类目中的方法名称和原有类的方法名字一样,类目中的方法优先级更高,系统会优先调用类目中的方法。

    • 缺点

      • 无法向类目添加实例变量,如果需要添加实例变量,只能通过定义子类的方式;
      • 类目中的方法与原始类以及父类方法相比具有更高优先级,如果覆盖父类的方法,可能导致super消息的断裂。因此, 最好不要覆盖原始类中的方法。
  • 21 循环引用的产生原因,以及解决方法

    • 比如两个对象A和B,他们相互都持有对方作为自己的成员变量,只有自己销毁的时候,对象的引用计数才能减1,对象A依赖于对象B的销毁,对象B依赖于对象A的销毁,这样就造成了循环引用,

    • 解决方法 - 把其中一个对象使用__weak修饰,使其中一个对象编程弱对象。

iOS面试题总结 (二)的更多相关文章

  1. IOS面试题(二)

    50. 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画? 答:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处 ...

  2. iOS 面试题(二):什么时候在 block 中不需要使用 weakSelf --转自唐巧

    问题 我们知道,在使用 block 的时候,为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,写下面这样的代码: __weak typeof(self) weakSelf ...

  3. IOS面试题总结

    iOS面试题: 一:网络理论知识的理解 1:Internet物理地址和IP地址转换采用什么协议 ARP(Address Resolution Protocol)地址解析协议 2:Internet采用哪 ...

  4. iOS 面试题 总结

    #include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc&q ...

  5. iOS面试题大全-点亮你iOS技能树

    所有的内容大部分来自于网络的搜集,所以我不是一个创造者,而是一个搬运工.我尽量把题目,尤其是参考答案的出处列明.若有任何疑问,建议,意见,请联系我. 第一部分面试题来源于iOS-Developer-I ...

  6. ios 面试题 经典(比较全) 根据重点总结

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

  7. iOS之面试题:腾讯三次面试以及参考思路

    使用了第三方库, 有看他们是怎么实现的吗? 例:SD.YY.AFN.MJ等! <1>.SD为例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  8. 国内搜索大哥iOS面试题

    每一次面试之后都会对问到的面试题进行总结. 这篇总结的是我面试某大型搜索公司的iOS面试题.一面(15min)+二面(30min).并拿到实习offer.当然在今天这个特殊的节日,祝大家新年快乐.希望 ...

  9. iOS使用Zbar扫描二维码

    iOS使用Zbar扫描二维码 标签(空格分隔):二维码扫描 iOS Zbar64位 正文: 首先下载一个支持64位系统的ZbarSDK的包,保存在了我的云盘里,地址:ZbarSDK 把文件拖到工程里面 ...

  10. 最全的iOS面试题及答案-转载

    1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现 ...

随机推荐

  1. MySQL中RESET SLAVE和RESET MASTER的区别

    RESET SLAVE的语法如下: RESET SLAVE [ALL] [channel_option] channel_option: FOR CHANNEL channel 其中,channel_ ...

  2. C语言 第三章 基础编程测试与练习

    1.屏幕上输出:This is a C program 2.输入两个整数,求两个数的和,如下所示:请输入第1个数:5请输入第2个数:3 3加5的和是8 3.完成华氏温度与摄氏温度间的转换,如下所示:请 ...

  3. Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算 ...

  4. RAC某节点启动遭遇ORA-01105,ORA-01606

    环境:RHEL6.5 + Oracle11.2.0.4 双节点RAC 故障现象:节点1实例没有启动成功,节点2正常启动. 1.故障现象 2.解决过程 3.总结 1.故障现象 尝试启动RAC 节点1,遭 ...

  5. (十五)WebGIS中平移功能的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一章我们将详细讲解WebGIS工具栏中另一个基础工具——平 ...

  6. 在Navicat premium上创建的SQL Server数据库,实现用PHP连接(即php连接微软MSSQL)

    用 freetds 或 dblib的方式连接sql server 在windows下使用FreeTDS 什么是FreeTDS? FreeTDS其实就是一个开源(或者可以说成自由)的C程序库,它可以实现 ...

  7. Scala比较器:Ordered与Ordering

    在项目中,我们常常会遇到排序(或比较)需求,比如:对一个Person类 case class Person(name: String, age: Int) { override def toStrin ...

  8. 我的runtime学习笔记

    0.简介: OC方法不同于C语言函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 至于其他理论上的东西不必讲太多,编程讲的就 ...

  9. 【C#进阶系列】26 计算限制的异步操作

    什么是计算限制的异步操作,当线程在要使用CPU进行计算的时候,那么就叫计算限制. 而对应的IO限制就是线程交给IO设备(键鼠,网络,文件等). 第25章线程基础讲了用专用的线程进行计算限制的操作,但是 ...

  10. 成 功 的 背 后 !( 致给所有IT人员)

    转载了这篇文章,希望能对自己和看到这篇博客的人有所激励. 成功的背后,有着许多不为人知的故事,而正是这些夹杂着泪水和汗水的过去,才成就了一个个走向成功的普通人. ------------------- ...