1.http和https有什么区别?
(1)HTTP:超文本传输协议,是短连接,是客户端主动发送请求,服务器作出相应,服务器响应之后,连接断开。HTTP是一个属于应用层的面向对象的协议。HTTP有两类报文:请求报文和响应报文。
(2)HTTPS:安全超文本传输协议,他是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSI)进行信息交换,简单来说它是HTTP的安全版。
2.长连接和短连接,阐述一下。
长连接:一旦和服务器建立连接之后,只要不主动退出,或是服务器不把你踢下线,这个连接就一直存在,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
好处:因为已经建立了连接,并且只需要建立一次,下次就直接发送请求,特别适合即时通信
缺点:一直占着服务器的连接资源,让别的客户端,无法访问
短连接:和服务器建立交互之后,会主动断开连接,这个叫做短连接 ,指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。
优点:不需要长期占用通道,对于业务频率不高的场合,能节省通道的使用。可以让更多的客户端.连接到服务器,然后获取资源
缺点:需要在每次发送业务时,都要建立一次连接,连接建立的过程开销大。每个客户端每一次都需要3次握手建立连接,这样的需要时间
3.XMPP协议
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
4.Sokect方面的环信方面的
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open–>读写write/read–>关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
5.Userdeafault和plist有什么区别?
起都存储在一个plist。
Plist和NSUserDefaults基本上是相同的然而NSUserDefaults只应该用于保存首选项和不大的数据量
6.查询数据库中前十个数据怎么写?
select top 20 *
from tbl
7.数据库(问题很大 很多 要好好搞)
8.如果后期需要增加数据库中的字段怎么实现,如果不使用CoreData呢?
3>修改表字段
ALETER TABLE表名RENAME COLUMN旧字段名TO新字段名
9.SQLite数据存储是怎么用?
1>增加SQLite动态库:libsqlite3.dylib
2>导入主头文件:#import
3>利用C语言函数创建/打开数据库,编写SQL语句
10.简单描述下客户端的缓存机制?
1.缓存可以分为:内存数据缓存、数据库缓存、文件缓存
2.每次想获取数据的时候
1>先检测内存中有无缓存
2>再检测本地有无缓存(数据库/文件)
3>最终发送网络请求
4>将服务器返回的网络数据进行缓存(内存、数据库、文件)以便下次读取
11.Md5、aes、RSA加密本质区别是什么?
Md5是不可逆的aes和RSA是可逆的
12.MVC和MVVM,简述一下
任何一个正经开发过一阵子软件的人都熟悉MVC,它意思是Model View Controller,是一个在复杂应用设计中组织代码的公认模式.它也被证实在iOS开发中有着第二种含义: Massive View Controller(重量级视图控制器)。它让许多程序员绞尽脑汁如何去使代码被解耦和组织地让人满意.
MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把model绑定到UI的元素上。
13.Assign和weak引用计数器加不加1,strong和retain引用计数器加不加1?
Assign和weak不加1,strong和retain加1.
14.Assign和weak修饰Delegate的时候,有什么区别?
Assign修饰时,出作用域的时候Delegate不会释放,容易野指针。Weak修饰时,出作用域之后Delegate将会释放。
15.Delegate会出现找不到方法的错误,不想实现方法又不想让其报错,应该怎么办?
将该方法从@required放入@optional中
16.category和extension
Category(类别):
Category在iOS开发中使用非常频繁,尤其是在为系统类进行拓展时,可以不用继承系统类,直接给系统类添加方法,最大程度的体现了OC的动态语言特性。
通常的命名方式是:Category扩展的类名+Category
name;
局限性:
1、无法向类中添加新的实例变量,类别没有位置容纳实例变量;
2、名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级,类别方法将完全取代初始方法。
类别的作用:
1、扩展一个其他实施者定义的类,可以为某个类增加方法,增加的方法会被子类继承,而且在运行时也不会和原始的方法有任何不同;
2、作为子类的一个替代方法,不需要定义一个子类来扩展已有的类,通过Category可以直接为类添加方法;
3、把实现一个新类的方法分布在多个源文件里,可以把一个很大的类的方法分组到几个Category里,然后把每个Category放在自己的文件里,Category在很多方面对开发过程都是有帮助的:
①提供一个简单地方式组合相关的方法。被定义在不同的类里的相似的方法可以被保存在同一个源文件里;
②当一个类是由多个开发者共同定义的时候,可以简化大类的管理;
③为一个非常大的类的增量编译提供方便;
④提高常用方法的本地参考;
⑤可以根据不同版本的程序配置不同的类,而无需为不同版本保持相同的源代码;
4、可以用来声明非正式协议;
注意:
1、Category的方法不一定非要在implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序会崩溃。
2、Category理论上不能添加变量,但是可以使用@dynamic来弥补这种不足。
Extension(扩展):
1、常被称为是匿名的Category
2、用于给类添加新方法,但只作用于原始类,不作用于subclass
3、只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的
4、可以给原始类添加新方法,以及新属性
区别:
1、形式上来看,Extension是匿名的Category
2、Extension里声明的方法需要在mainimplementation中实现,Category不强制要求
3、Extension可以添加属性(变量),Category不可以
17.category分类中能否添加属性,为什么,应该怎么添加,代码是什么?
用runtime实现
objc_setAssociatedObject(<#id
object#>, <#const void *key#>, <#id value#>,
<#objc_AssociationPolicy policy#>)
18.简述ViewController的生命周期,按顺序。
各方法执行流程如下:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
19.ViewWillAppear和ViewDidLoad中加通知,在哪个方法中移除?
将移除通知的代码放到dealloc方法中
dealloc方法是在控制器销毁之时调用的。这个时候移除通知而不是在viewWillDisappear:方法中移除可以有效避免上述的问题
20.ViewController1和ViewController2,当V1跳到V2时,相对于V1来说ViewController的生命周期执行哪些方法?相对于V2来说ViewController的生命周期执行哪些方法?
v1
viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
v2
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper
21.简述oc的消息转发机制?
1、动态方法解析
2、备用接受者
3、完整转发
22.Objc对nil对象发消息会导致什么?
在Objective-C中向nil发送消息是完全有效的,只是在运行时不会有任何作用
23.事件的传递顺序
触摸事件的传递是从父控件传递到子控件
也就是UIApplication->window->寻找处理事件最合适的view
24.一个界面有两个滑动的时间,你是怎么处理滑动事件冲突的。
25.什么是block?block实现原理?
block是一个特殊的OC对象,它建立在栈上,而不是堆上,这么做一个是为性能考虑,还有就是方便访问局部变量。默认情况下block使用到的局部变量都会被复制,而不是保留。所以它无法改变局部变量的值。如果在变量面前加上__block,那么编译器回去不会复制变量,而是去找变量的地址,通过地址来访问变量,实际上就是直接操作变量。另外block是在栈上分配的,所以一旦离开作用域,就会释放,因此如果你要把快用在别的地方,必须要复制一份。block是不能保留的, retain对块没有意义。
26.Int a = 0;block{ a = 10; }错没错?应该怎么改?
修饰int a = 0的时候加上__block
27.block如果出现循环引用怎么办?简述循环引用怎么造成的?
block内部有一个weakself,weakself本身是一个弱引用,由于对弱引用无法强持有,所以, block并没有强持有self,当self想要释放的时候,已经没有其他强引用了,就可以释放.self被释放,就没有变量强持有block,block也会释放.这样,循环引用就不存在了
28.地图的浮层怎么操作的,地理编码 和 反地理编码自定义大头针(百度地图)?
29.支付宝的流程?微信支付的流程?内购的流程?
支付宝快捷支付的主要步骤:
先与支付宝签约,获得商户ID(partner)和账号ID(seller);
下载相应的公钥私钥文件(加密签名用);
下载支付宝SDK;
生成订单信息;
调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道;
支付完毕后返回支付结果给商户客户端和服务。
而iOS客户端需要做的是:
调用支付宝支付接口;
处理支付宝返回的支付结果。
在调用支付宝支付接口前,还需要先生成一个订单,下载的支付宝文档中描述时,是将这步也放在客户端来做了,但也可以在服务器端生成这个订单(支付宝会在支付成功后通知服务器端,所以在服务器端生成订单的话,开发者掌握所有订单,而且也会更安全)。
生成订单(可以在iOS客户端内生成,也可以在服务器端生成);
调用支付宝支付接口,发送订单;
处理支付宝返回的支付结果。
支付宝支付的安全问题,需要在生成订单和处理支付结果的时候做一个安全性校验:即生成订单时对数据签名,收到支付结果时对数据进行签名验证,以检验数据是否被篡改过(支付宝目前只支持采用RSA加密方式做签名验证)。简单地说,就是在生产订单时,需要使用私钥生成签名值;在处理返回的支付结果时,需要使用公钥验证返回结果是否被篡改
30.简述一下你项目中的封装思想。
将有相同属性的成员放入一个类中,将其内部属性屏蔽起来,控制器只需要用他而不需要知道他内部的成员属性
31.你都自定义过什么控件?
自己发挥
32.Runtime简述?
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数(C语言的函数调用请看这里)。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。
33.runtime实现的机制是什么,怎么用,一般用于干嘛.你还能记得你所使用的相关的头文件或者某些方法的名称吗
太多。参考这个
http://www.jianshu.com/p/29d674eec06e
34.Runloop简述,NSRunLoop的实现机制,及在多线程中如何使用。
Run loops是线程相关的的基础框架的一部分。一个run loop就是一个事件处理 的循环,用来不停的调度工作以及处理输入事件。
使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。
Runloop还可以在loop在循环中的同时响应其他输入源,比如界面控件的按钮,手势等。
线程和RunLoop之间是一一对应的,其关系是保存在一个全局的Dictionary里。线程刚创建时并没有RunLoop,如果你不主动获取,那它一直都不会有。RunLoop的创建是发生在第一次获取时,RunLoop的销毁是发生在线程结束时。你只能在一个线程的内部获取其RunLoop(主线程除外)。
35.scrollView滑动时间和定时器的冲突怎么解决?
NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环中的时候, ScrollView滚动过程中会因为mode的切换,而导致NSTimer将不再被调度。
36.多线程有哪几种,优缺点是什么?
NSThread:
优点:NSThread比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
Cocoa operation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa operation相关的类是NSOperation,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation和NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到6了,所以不用担心该技术不能使用。
37.@property都为我们产生出什么东西?并且怎么能只生成getter方法不生成setter方法?
生成__实例变量,setter方法,getter方法
添加一个只读属性readonly
38.@synthesize和@dynamic分别有什么作用?
@synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。
@dynamic告诉编译器:属性的setter与getter方法由用户自己实现,不自动生成。(当然对于readonly的属性只需提供getter即可)。假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var =
someVar,由于缺setter方法会导致程序崩溃;或者当运行到someVar = var时,由于缺getter方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定
39.哪些类型使用copy,不用strong?如果NSString使用了strong不用copy会造成什么问题?
当源字符串是NSString时,由于字符串是不可变的,所以,不管是strong还是copy属性的对象,都是指向源对象,copy操作只是做了次浅拷贝。
当源字符串是NSMutableString时,strong属性只是增加了源字符串的引用计数,而copy属性则是对源字符串做了次深拷贝,产生一个新的对象,且copy属性对象指向这个新的对象。另外需要注意的是,这个copy属性对象的类型始终是NSString,而不是NSMutableString,因此其是不可变的。
这里还有一个性能问题,即在源字符串是NSMutableString,strong是单纯的增加对象的引用计数,而copy操作是执行了一次深拷贝,所以性能上会有所差异。而如果源字符串是NSString时,则没有这个问题。
所以,在声明NSString属性时,到底是选择strong还是copy,可以根据实际情况来定。不过,一般我们将对象声明为NSString时,都不希望它改变,所以大多数情况下,我们建议用copy,以免因可变字符串的修改导致的一些非预期问题
40.iOS沙盒目录的结构是怎么样的?APP Bundle里面都有什么?
(1)默认情况下,每个沙盒含有3个文件夹:Documents, Library和tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
tmp:提供一个即时创建临时文件的地方。
(2)
1、名称
在用户从App Store发现你的App Bundles过程中,App Bundles的名称扮演了一个关键的角色。开发者需要选择一个能精准反应App
Bundles内容的名字(比如Music Maker
Bundle或者Winter Sports Pack)。尽量不要使用“Editor’s Choice”、“Essentials”或者“Collection”这类词。
尤其需要注意App Bundles的名称在iPad、iPhone以及iPod touch的App Store中的展示。过长的名字会被系统截断,用户也不会看到所有的字符。推荐将App Bundles的名字限定在23个字符以内,以便能在每台设备上都能最佳展示。
2、截图
每个bundled
app的第一张截图会展示在App Bundle的产品页面。最好的情况是每张截图都能清晰地传达应用程序的精髓。
3、关键字
iTunes
Connect会编译你为bundled apps键入的关键字,并在你的App Bundle元数据中使用它们。
4、Icons
App
Bundles的icon由包中头四个app组成中。开发者可以选择突出最能引起用户兴趣的四个app,所以要考虑放置最受欢迎的应用程序。
要确保App
Bundle中每个应用程序的icon是与众不同的,并集中于一个最引人注目的图像上。文本、品牌以及其他小的元素可能不能很好地展示在尺寸缩小的bundle icon上。
5、Bundle描述
App
Bundle的描述应当是简明的、吸引人的。最开始的那几句描述最重要,这些内容需要用户一眼就能看到,无需点击“…
more”。理想的描述应当是一个简洁的引人注目的段落,然后是主要功能列表项目。
关注App
Bundle的各个方面都将会促使用户下载你的应用(还包括其他方面,比如App Bundle中应用程序的质量、为什么要创建一个Bundle app以及你所提供的折扣价格)。