ios面试题目总结

一、为什么说Object-C是一门动态语言?

有三个名词容易混淆:

    Dynamic Programming Language  动态语言或动态编程语言

    Dynamically Typed Language 动态类型语言

    Statically Typed Language  静态类型语言         

1、动态语言

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

2、动态类型语言

意思就是类型的检查是在运行时做的。

3、静态类型语言

类型判断是在运行前做的(如编译阶段),比如c#、Java就是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,一般的动态语言都会采用dybamic typing,常出现在脚本语言中。是不是动态类型语言和这门语言是不是类型安全的完全没有联系。

4、不同类型语言的优缺点

静态类型语言的优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此要写很多的类型相关代码,导致不便于阅读、不清晰明了。动态类型语言的优点在于方便阅读,不需要写很多的类型相关的代码;缺点是不方便调试,命名不规范时会造成读不懂。

5、Object-C的动态运行性

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

a、动态类型

b、动态绑定

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

c、动态载入

让程序在运行时添加代码模块和其他资源,用户可以根据需要加载一些可执行代码和资源,而不是再启动时就加载所有的组件。可执行代码中可以含有和程序运行时整合的新类。

二、讲一下MVC、MVVM、MVP和VIPER

1、前三种设计模式都把一个应用中的实体分成了以下三类:

Models-负责主要的数据或者操作数据的数据访问层。

Views-负责展示层(GUI)。

Controller/Presenter/ViewModel-负责协调Model和View,通常根据用户在View上的动作在Model上做出对应的更改,同时将更改的信息返回到View上。

2、将实体进行划分给我们带来的好处

更好的理解他们之间的关系

复用(尤其是对于View和Model)

独立测试

3、了解MV(X)系列

a、MVC的过去

在我们探讨apple的MVC模式之前,先来了解一下传统的MVC模式


传统的MVC

在这里,View没有任何的界限,仅仅是简单的在controller中呈现Model的变化,三个实体都有通信,紧密耦合,没有复用可言。

b、苹果推荐的MVC-愿景


cocoa的MVC

model和View之间没有了直接联系,controller成了他们之间的一个协调器,controller中去写一些逻辑复杂度比较高的代码。实现了可复用,然而这样就有一个问题。

c、苹果推荐的MVC-事实


事实上的cocoa的MVC

cocoa的MVC模式驱使人们写出臃肿的视图控制器,因为她们经常混杂在View的生命周期中,因此很难说View和controller是分离的。尽管仍然可以将业务逻辑和数据转换到Model中,View的最大任务就是controller传递用户的行为,viewcontroller最终会承担起一些代理和数据源的责任,还负责一些分发和取消网络请求以及一些其他的任务。

像下面的代码

var userCell = tableView.dequeueReusableCellWithIdentifier("identifier")  as  UserCell

userCell.configureWithUser(user)

这个cell实际上直接和Model进行了通信,所以事实上的mvc原则已经违背了,但是这种情况是一直发生的,甚至人们都不会觉得哪里不对,如果严格遵守mvc的话,View必须经过controller的调度才能拿到Model里面的数据,这样势必会导致conreoller的体积增大,难以维护。值得注意的一点是,就开发速度而言,cocoa的mvc是最好的架构选择方案。

d、MVP实现了cocoa的MVC愿景


presenter

用来实现Cocoa的mvc愿景的,MVP的协调器。presenter并没有对viewcontroller的生命周期做出任何改变,因此View了一很容易的模拟出来,在presnter中没有和布局有关的代码,但是它却负责View的更新和状态。

e、MVVM-最新且最伟大的MV(X)的成员


MVVM

他和MVP模式看起来非常的像。view model基本上就是uikit下的控件和以及控件状态,ViewModel的调用会改变Model同时会将Model的改变更新到自身。

如果我们不想自己实现,那么我们有两种选择:

基于kvo的绑定库如RADataBindingswiftBond

完全的函数响应式编程,比如像ReactiveCocoa,RxswiftPromiseKit

4、VIPER-把LEGO建筑经验迁移到iOS app的开发


VIPER

找到一个适合的方法来实现路由对iOS应用是一个挑战,MV(X)系列避开了这个问题。

三、为什么代理要用weak?

weak:指明对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。

strong:该对象强引用delegate,外界不能销毁delegate这个对象,并且这样还会导致循环引用。

四、Datasource和Delegate的区别

Datasource是告诉使用者之前的View中是有什么东西,有什么属性,属性的值是多少,是只关于数据的东西。

Delegate是告诉使用者之前的View有什么方法可以供我调用。

五、block和代理的区别

首先两者的作用是一样的,都是进行单一回调。不同的是delegate是对象,然后通过对象来调用协议函数来完成操作。block试穿第一个函数指针,利用函数指针执行来进行回调。在内存管理上,delegate不需要保存引用,block对数据有copy处理。

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

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

以下是一些属性关键字的具体含义

属性关键字

@synthesize和@dynamic区别,在声明property属性后,有两种选择

@synthesize

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

@dynamic

告诉编辑器,不自动生成getter和setter方法,避免编译期间产生警告,由自己实现存取方法,或者存取方法在运行时动态创建绑定,这种情况主要是用在CoreData的实现NSManagedObject子类时使用,由core data框架在程序运行时动态生成子类属性。

七、属性的默认关键字是什么?

对于基本数据类型默认关键字是atomic,readwrite,assign

对于普通的oc对象是atomic,readwrite,strong

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

使用strong关键字后创造出的对象和原对象的对象地址是一样的,指向同一个对象,而使用copy关键字对象地址是不一样的,是创建了一个新的对象。由此我们可以看到如果原对象的值有了改变使用copy关键字的就会跟随改变因为地址是一样的,而使用strong关键字的就不会跟随改变,因为是新创建的对象,地址是不一样的。

九、如何令自己写的对象具备拷贝功能?

需要实现NSCopying协议,如果自定义的对象分为可变版本和不可变版本,那么就需要同时实现NSCopying和NSMUtableCopying协议。

十、可变集合类和不可变集合类的copy和mutablecopy有什么区别?如果集合是内容复制的话,集合里面的内容也是内容复制吗?

首先我们要明白一个概念,什么是倩复制,单层深复制,完全复制(每一层都深复制)

浅复制就是指针复制,并没有进行对象复制;

单层深复制就是我们常说的深层复制,我们这里说的单层深复制是针对集合类说的(NSArry, NSDictionary,NSSet),单层深复制值得是只复制了该集合类的最外层,里面的元素没有进行复制(即这两个集合类的地址不一样,但是两个集合里所存储的元素的地址是一样的);

完全复制指的是完全复制整个集合类,也就是说两个集合类地址不一样,里面所存储的元素地址也不一样。

[immutableObject copy]//浅复制

[immutableObject mutableCopy]//深复制

[mutableObject copy]//深复制

[mutableObject mutableCopy]//深复制

NSArray*copyArray = [[NSArrayalloc] initWithArray:array copyItems:YES];// 完全复制

十一、为什么IBOutlet修饰的View也是用weak关键字?

因为当我们将控件拖到storyboard上就相当于新创建了一个对象,而这个对象加到视图控制器的View上的,View有一个subviews属性,这个属性是一个数组,而我们加的控件就在这个数组中,那么实际上我们的控件对象是属于View的,也就是说View对加到他上面的控件是强引用。当我们是用outlet属性的时候,我们是在viewcpntroller里面使用,而这个outlet属性是由View强引用的,在viwecontroller里面仅仅是对其使用,并没有必要拥有它,所以是weak。

十二、oc使用什么机制来管理对象内存?

mrc 手动内存管理

arc自动引用计数

garbage collection(垃圾回收) 但是ios不支持垃圾回收,arc作为llvm3.0编译器的一项特性,在ios5.0(xcode4.0)版本后推出。

arc的判断规则是,对象没有强指针指向对象,对象就会被释放。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容