美文网首页
iOS最新面试锦集

iOS最新面试锦集

作者: 有梦想的程序员 | 来源:发表于2017-12-28 16:59 被阅读17次

搬运了一些其他网站的,然后自己添加了一些,方便查看。

1、为什么说Objective-C是一门动态的语言?

① 什么是动态语言?

动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如RubyPython等也都属于动态语言,而CC++等语言则不属于动态语言。

有三个名词容易混淆:
·Dynamic Programming Language (动态语言或动态编程语言)
·Dynamically Typed Language   (动态类型语言)
·Statically Typed Language    (静态类型语言)

所谓的动态类型语言,意思就是类型的检查是在运行时做的。

② 静态类型

而静态类型语言的类型判断是在运行前判断(如编译阶段),比如C#Java就是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中.需要明确说明一点,那就是,是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起!
优缺点:
静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。动态类型语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。

③ Objective-C的动态运行性

objective-c语言是C语言的一个子类,所以Objective-C是一个静态语言,但是Objective-C的三大特性之一的多态性让其拥有了动态性。
oc的动态性让程序可以在运行时判断其该有的行为,而不是像c等静态语言一样在编译构建时就确定下来。它的动态性主要体现在一下三个方面:

动态类型

如id类型。实际上静态类型因为其固定性和可预知性而使用得更加广泛。静态类型是强类型,而动态类型属于弱类型。运行时决定接收者。
这里补充讲一下强、弱类型:语言有无类型、强类型和弱类型三种。无类型的不做任何检查,甚至不区分指令和数据;弱类型的检查很弱,仅能区分指令和数据;强类型的严格在编译期进行检查。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作

动态绑定

让代码在运行时判断需要调用什么方法,而不是在编译时。与其他面向对象语言一样,方法调用和代码并没有在编译时连接在一起,而是在消息发送时才进行连接。运行时决定调用哪个方法。

动态载入

让程序在运行时添加代码模块以及其他资源。用户可以根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件。可执行代码中可以含有和程序运行时整合的新类。
对象是运行时类的一个实例。在类里声明了的实例变量和方法,它的每个实例都在内存中拥有同样的实例变量,以及指向那些方法的指针。在oc中对象永远是通过指针来引用的。

2.讲一下MVC和MVVM,MVP?

① 、MVC

MVC模式的意思是,软件可以分成三个部分。

MVC.png
视图(View):用户界面。
控制器(Controller):业务逻辑
模型(Model):数据保存

各部分之间的通信方式如下。


image.png
1.View 传送指令到 Controller
2.Controller 完成业务逻辑后,要求 Model 改变状态
3.Model 将新的数据发送到 View,用户得到反馈

所有通信都是单向的。

② 、MVP

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。


MVP.png
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 Presenter 传递。
3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

③ 、MVVM

MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

MVVM.png
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。AngularEmber 都采用这种模式。

3.为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?

为什么代理要用weak

防止循环引用。例如View有一个协议,需要一个代理实现回调。一个Controller添加这个View,并且遵守协议,成为View的代理。如果不用week,用strongController ->View -> delegate -> Controller,就循环引用了。

代理属性都用weak或是assign修饰, 现整理下weak(assign)strong(retain)修饰区别:

@property (nonatomic, weak) id delegate;
weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。

@property (nonatomic, strong) id delegate;
strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain MainVC)

Datasource和Delegate两者的区别:

Datasource 是在告诉使用者之前的view中都有什么东西,有什么属性啊,属性的值都是多少,是只关于数据的东西。
Delegate 是在告诉使用者之前的view有什么方法可以供我调用。
一个是数据,一个是操作。

block和代理的区别:

blcok可以看一下这篇文章
首先两者作用是一样的,都是进行单一回调。不同的是,delegate是个对象,然后用过一个对象自己调用代理协议函数来完成整个流程。block是传递一个函数指针,利用函数指针执行来进行回调。还有在内存管理上需要注意,delegate不需要保存引用。block对引用数据有copy的处理。

4. 属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?

@property 属性的本质

属性的组成: @property = ivar + getter + setter;
实例变量+get方法+set方法,也就是说使用@property系统会自动生成settergetter方法;

属性默认的关键字

我们经常使用assign,weak,strong,copy,nonatomic,atomic,readonly等关键字,下面我们列个表格去归纳一下属性关键字具体作用:

image.png

@synthesize和@dynamic区别, 在声明property属性后,有2种实现选择:

@dynamic关键字和@synthesize关键字

@synthesize

编译器期间,让编译器自动生成 getter/setter 方法。当有自定义的存或取方法时,自定义会屏蔽自动生成该方法。

@dynamic

告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告,然后由自己实现存取方法。
或存取方法在运行时动态创建绑定:主要使用在CoreData的实现NSManagedObject子类时使用,由Core Data框架在程序运行的时动态生成子类属性。

5.属性的默认关键字是什么?

对于基本数据类型默认关键字是:atomic,readwrite,assign
对于普通的OC对象:atomic,readwrite,strong

6.NSString为什么要用copy关键字,如果用strong会有什么问题?

http://blog.csdn.net/huang512715681/article/details/73293357

相关文章

  • iOS最新面试锦集

    搬运了一些其他网站的,然后自己添加了一些,方便查看。 1、为什么说Objective-C是一门动态的语言? ① 什...

  • iOS最新面试题汇总(四)

    iOS最新面试题汇总:iOS最新面试题汇总(一)iOS最新面试题汇总(二)iOS最新面试题汇总(三)iOS最新面试...

  • iOS最新面试题汇总(三)

    iOS最新面试题汇总:iOS最新面试题汇总(一)iOS最新面试题汇总(二)iOS最新面试题汇总(三)iOS最新面试...

  • iOS最新面试题汇总(一)

    iOS最新面试题汇总:iOS最新面试题汇总(一)iOS最新面试题汇总(二)iOS最新面试题汇总(三)iOS最新面试...

  • iOS最新面试题汇总(二)

    iOS最新面试题汇总:iOS最新面试题汇总(一)iOS最新面试题汇总(二)iOS最新面试题汇总(三)iOS最新面试...

  • 集锦1 iOS面试

    iOS面试题锦集 1.Difference between shallow copy and deep copy?...

  • 关于iOS面试题汇总(栏目持续更新)

    整理的一些iOS面试相关问题,持续更新,敬请关注 iOS面试题题集--iOS面试题集[https://www.ji...

  • 关于iOS面试题汇总(栏目持续更新)

    整理的一些iOS面试相关问题,持续更新,敬请关注 iOS面试题题集--iOS面试题集[https://www.ji...

  • iOS面试知识点整理

    参考:2017年最新 iOS面试题及答案2017秋季校园招聘iOS开发岗位面试题集锦iOS面试题300+2017...

  • android阿里面试java基础锦集

    接着上一篇 android阿里面试锦集 今天给大家带来一篇 android阿里面试java基础锦集。很多知识都是T...

网友评论

      本文标题:iOS最新面试锦集

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