常见笔试题(三)

十一、面向对象的三大特征,并做简单的介绍。php

面向对象的三个基本特征是:封装、继承、多态。
java

封装是面向对象的特征之一,是对象和类概念的主要特性。
node

封装,也就是把客观事物封装成抽象的类,而且类能够把本身的 数据和方法只让可信的类或者对象操做,对不可信的进行信息隐藏。隐藏对象的属性和实现细节,仅对外公开接口,提升代 码安全性,封转程度越高,独立性越强,使用越方便。ios

继承是指这样一种能力:它可使用现有类的全部功能,并在无需从新编写原来的类的状况下对这些功能进行扩展。 经过 继承建立的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”c++

多态性:容许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值以后,父对象就能够根据当前赋值给它的子 对象的特性以不一样的方式运做。简单的说,就是一句话:容许将子类类型的指针赋值给父类类型的指针
程序员

十二、咱们说的obc是动态运行时语言是什么意思?web

多态。主要是将数据类型的肯定由编译时,推迟到了运行时。这个问题其实浅涉及到两个概念,运行时和多态。简单来讲, 运行时机制使咱们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。多态:不一样对象以本身的方式响应 相同的消息的能力叫作多态。意思就是假设生物类(life)都用有一个相同的方法-eat;那人类属于生物,猪也属于生物,都 继承了life后,实现各自的eat,可是调用是咱们只需调用各自的eat方法。也就是不一样的对象以本身的方式响应了相同的消 息(响应了eat这个选择器)。所以也能够说,运行时机制是多态的基础1objective-c

三、readwrite,readonly,assign,retain,copy,nonatomic 、strong、weak属性的做用?并区别sql

strong(强引用)、 weak(弱引用)?什么状况使用copy,assign,和retain?数据库

readwrite 是可读可写特性;须要生成getter方法和setter方法时

readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不但愿属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示赋值特性,setter方法将传入对象复制一份;须要彻底一份新的变量时。

nonatomic 非原子操做,决定编译器生成的setter getter是不是原子操做,atomic表示多线程安全,通常

使用 nonatomic

assign用于简单数据类型,如NSInteger,double,bool。

retain 和copy用户对象,copy用于当 a指向一个对象,b也想指向一样的对象的时候,若是用assign,a若是释放,再 调用b会crash,若是用copy 的方式,a和b各自有本身的内存,就能够解决这个问题。retain 会使计数器加1,也能够解 决assign的问题。另外:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操做。 在多线程环境 下,原子操做是必要的,不然有可能引发错误的结果。

1四、为何不少内置类如UITableViewController的delegate属性都是assign而不是retain的?

会引发循环引用----如果retain,在alloc一次以后,若release一次,会致使内训泄漏,若release两次会致使两个 对象的dealloc嵌套执行,结果就是都没有执行成功,最后崩溃!全部的引用计数系统,都存在循环应用的问题。例以下面的引用关系:

* 对象a建立并引用到了对象b. * 对象b建立并引用到了对象c. * 对象c建立并引用到了对象b.

这时候b和c的引用计数分别是2和1。 当a再也不使用b,调用release释放对b的全部权,由于c还引用了b,因此b的引用计数为1,b不会被释放。 b不释放,c的引用计数就是1,c也不会被释放。今后,b和c永远留在内存中。 这种状况,必须打断循环引用,经过其余规则来维护引用关系。咱们常见的delegate每每是assign方式的属性而不是 retain方式 的属性,赋值不会增长引用计数,就是为了防止delegation两端产生没必要要的循环引用。 若是一个UITableViewController 对象a经过retain获取了UITableView对象b的全部权,这个UITableView对象b的 delegate又是a,若是这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。本身在设计使用 delegate模式时,也要注意这点。

1五、ObjC中,与retain配对使用的方法是dealloc仍是release,为何?须要与alloc配对使用的方法是dealloc仍是release,为何?

与retain配对使用的方法是release,由于retain使retainCount计数加1,release使retainCount计数减1;与 retain语义相反的是release。 与alloc配对使用的是release,由于:alloc是使retainCount计数加1,,使retainCount计数减1。与alloc语义相反

的是dealloc,由于:alloc是建立一个对象,,dealloc是销毁一个对象。

1六、重写一个NSStrng类型的,retain方式声明name属性的setter和getter方法{ NSString * _name; } @property NSString *name;----加上这些是为了不错误

setter方法:
-(void)setName:(NSString*)name
{

[_name release];
_name=[name retain];

}
1七、分别描述内存管理要点、autorelease、release、NSAutoreleasePool?并说明autorelease是什 么时候被release的?简述何时由你负责释放对象,何时不禁你释放?[NSAutoreleasePool release]

和[NSAutoreleasePool drain]有什么区别?

内存管理要点:

Objective-C 使用引用计数机制(retainCount)来管理内存。内存每被引用一次,该内存的引用计数+1,每被释放一次引 用计数-1。当引用计数 = 0 的时候,调用该对象的 dealloc 方法,来完全从内存中删除该对象。

alloc,allocWithZone,new(带初始化)时:该对象引用计数 +1;

retain:手动为该对象引用计数 +1;

copy:对象引用计数 +1;

mutableCopy:生成一个新对象,新对象引用计数为 1;

release:手动为该对象引用计数 -1;

autorelease:把该对象放入自动释放池,当自动释放池释放时,其内的对象引用计数 -1。

NSAutoreleasePool:

NSAutoreleasePool是经过接收对象向它发送的autorelease消息,记录该对象的release消息,当自动释放池被销毁 时,会自动向池中的对象发送release消息。
autorelease 是在自动释放池被销毁,向池中的对象发送release
只能释放本身拥有的对象,

区别是:在引用计数环境下(在不使用ARC状况下),二者基本同样,在GC环境下,release 是一个no-op(无效操 做),因此不管是否是gc都使用drain

18IPhone OS有没有垃圾回收?autorelease 和垃圾回收制(gc)有什么关系?

没有。autorelease只是延迟释放,gc是每隔一段时间询问程序,看是否有无指针指向的对象,如有,就将它回收。他们 二者没有什么关系。

1九、drawRect和layoutSubviews的区别

两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘。 layoutSubviews对subviews从新布局

layoutSubviews方法调用先于drawRect

20、简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?

Notification 是观察者模式的实现,KVO是观察者模式的OB-C底层实现。

NOtification 经过 Notifydcation addobserver 和 remove observer 工做。

KVO是键值监听,键值观察机制,提供了观察某一属性变化的方法 KVC是键值编码,是一种间接访问对象的属性,使用字符串来标示属性(例如:setValue:forKey:)

Delegate:把某个对象要作的事情委托给别的对象去作。那么别的对象就是这个对象的代理,代替它来打理要作的 事。反映到程序中,首先要明确一个对象的委托方是哪一个对象,委托所作的内容是什么。
区别:
2一、线程与进程的区别和联系?

线程是进程的基本单位进程和线程都是由操做系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的主要差异在于它们是不一样的操做系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下 不会对其它进程产生影响,而线程只是一个进程中的不一样执行路径。

线程有本身的堆栈和局部变量,但线程之间没有单独的 地址空间,一个线程死掉就等于整个进程死掉,因此多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较 大,效率要差一些。但对于一些要求同时进行而且又要共享某些变量的并发操做,只能用线程,不能用进程。

2二、简述多线程的做用以及什么地方会用到多线程?OC实现多线程的方法有哪些?谈谈多线程安全问题的几种解

  决方案?何为线程同步,如何实现的?分线程回调主线程方法是什么,有什么做用?

getter方法 -(NSString*)name

{return _name if(_name!=name) }

(1)、多线程的做用:能够解决负载均衡问题,充分利用cpu资源 。为了提升CPU的使用率,采用多线程的方式去同时完 成几件事情而互不干扰,

(2)、大多状况下,要用到多线程的主要是须要处理大量的IO操做时或处理的状况须要花大量的时间等等,好比:读写文 件、视频图像的采集、处理、显示、保存等。 (3)、ios有三种主要方法:

一、NSThread。

二、NSOperation。

三、GCD。

(4)解决方案:使用锁:锁是线程编程同步工具的基础。锁可让你很容易保护代码中一大块区域以便你能够确保代码的正 确性。使用POSIX互斥锁;使用NSLock类;使用@synchronized指令等。

(5)回到主线程的方法: dispatch_async(dispatch_get_main_queue(), ^{ });

做用:主线程是显示UI界面,子线程多数是进行数据处理

2三、http和scoket通讯的区别?socket链接相关库,TCP,UDP的链接方法,HTTP的几种经常使用方式?http和scoket通讯的区别:

http是客户端用http协议进行请求,发送请求时候须要封装http请求头,并绑定请求的数据,服务器通常有web服务器配 合(固然也非绝对)。

http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开链接,以节省资 源。服务器不能主动给客户端响应(除非采起http长链接技术)。

iphone主要使用类是NSUrlConnection。

scoket是客户端跟服务器直接使用socket“套接字”进行链接,并无规定链接后断开,因此客户端和服务器能够保持连 接通道,双方均可以主动发送数据。通常在游戏开发或股票开发这种要求即时性很强而且保持发送数据量比较大的场合使 用。

主要使用类是CFSocketRef。

UDP:是用户数据报协议:主要用在实时性要求高以及对质量相对较弱的地方,但面对如今高质量的线路不是容易丢包除非 是一些拥塞条件下 ,如流媒体 TCP:是传输控制协议:是面链接的,那么运行环境必然要求其可靠性不可丢包有良好的拥塞控制机制如http ftp telnet 等

http的经常使用方式:get,post

2四、What is lazy loading?

就是懒汉模式,只在用到的时候才去初始化。也能够理解成延时加载。 我以为最好也最简单的一个列子就是tableView中图片的加载显示了。 一个延时载,避免内存太高,一个异步加载,避免线程堵塞。

2五、你链接服务器用的是什么方法,若是请求过程当中,网络出了问题这么办?
NSUrlConnection 链接后,有一系列委托方法来接受来自服务器的响应和数据,其中接受相应的方法回获得服务器要传 回的数据有多大,接受数据的方法会反复调用来不断接受服务器数据,若是网络出了问题了,会调用一个方法让你来作相关 处理。

2六、OC有多继承吗?没有的话能够用什么方法替---多继承即一个子类能够有多个父类,它继承了多个父类的特

性。

Object-c的类没有多继承,只支持单继承,若是要实现多继承的话,能够经过类别和协议的方式来实现,OC相似于多继承,是在 用protocol委托代理来实现的;能够实现多个接口,经过实现多个接口能够完成C++的多重继承;Category是类别,一 般状况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其余类与原有类的关系。

2七、什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为何?

Protocol:一个方法签名的列表,在其中能够定义若干个方法。根据配置,遵照协议的类,会实现这个协议中的若干个方 法。

代理:实现这个协议中的方法的类

委托的interface:声明一个某协议的属性delagate

用assgin属性,缘由是,为了不循环引用。

2八、分别描述类别(categories)和延展(extensions)是什么?以及二者的区别?继承和类别在实现中有何区

别?为何Category只能为对象添加方法,却不能添加成员变量?

类别:在没有原类.m文件的基础上,给该类添加方法; 延展:一种特殊形式的类别,主要在一个类的.m文件里声明和实现延展的做用,就是给某类添加私有方法或是私有变量。

两个的区别:延展能够添加属性而且它添加的方法是必需要实现的。延展能够认为是一个私有的类目。

继承和类别在实现中的区别:类别能够在不获悉,不改变原来代码的状况下往里面添加新的方法,只能添加,不能删除修 改。而且若是类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,由于类别具备更高的优先级。

Category只能为对象添加方法,却不能添加成员变量的缘由:若是能够添加成员变量,添加的成员变量没有办法初始 化----这是语言规则


2九、写一个NSString类的实现+ (id)initWithCString:(constchar *)nullTerminatedCString encoding:

(NSStringEncoding)encoding;

{ NSString *obj;

obj = [self allocWithZone: NSDefaultMallocZone()];

obj = [obj initWithCString: nullTerminatedCString encoding: encoding]; return [obj autorelease];

}


30、Objective-C有私有方法么?私有变量呢?如多没有的话,有没有什么代替的方法?objective-c类里面的方法只有两种, 静态方法和实例方法.可是能够经过把方法的声明和定义都放在.m文件中来实现一个表 面上的私有方法。有私有变量,能够经过@private来修饰,或者把声明放到.m文件中。在Objective‐C中,全部实例变 量默认都是私有的,全部实例方法默认都是公有的

3一、#import、#include和@class有什么区别@class通常用于头文件中须要声明该类的某个实例变量的时候用到,它只是声明了一个类名,关于这个类的内部实现都没 有告诉编译器,在m文件中仍是须要使用#import。

而#import比起#include的好处就是不会引发交叉编译。

3二、谈谈你对MVC的理解?为何要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其余的OC设计模式或别 的设计模式吗?

MVC就是Model-View-Controller的缩写,M指的是业务模型,V指的是用户页面,C指的是控制器。MVC是架构模式,是讲M和 V的代码分离,从而使同那个一个程序可使用不一样的表现形式。 M:表示数据和业务规则,V是用户看到的并与之交互的页面,C是接受用户的输入并调用M和V取完成用户需求的 单例,代理,观察者,工厂模式等 单例模式:说白了就是一个类不经过alloc方式建立对象,而是用一个静态方法返回这个类的对象。系统只须要拥有一个的 全局对象,这样有利于咱们协调系统总体的行为; 代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.好比一个工厂生产了产品,并不想 直接卖给用户,而是搞了不少代理商,用户能够直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代 理拦截,代理模式在iphone中获得普遍应用.

观察者模式: 当一个物体发生变化时,会通知全部观察这个物体的观察者让其作出反应。实现起来无非就是把全部观察者的 对象给这个物体,当这个物体的发生改变,就会调用遍历全部观察者的对象调用观察者的方法从而达到通知观察者的目的;

3三、如监测系统键盘的弹出

- (id) init


{

self = [super init]; if (self)

{


NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserver:self selector:@selector(keyboardDidShow)

name:UIKeyboardDidShowNotification object:nil];

[center addObserver:self selector:@selector(keyboardDidHide)

name:UIKeyboardWillHideNotification object:nil]; _keyboardIsVisible = NO;

}

return self;

}

-  (void)keyboardDidShow

{

_keyboardIsVisible = YES;

}

-  (void)keyboardDidHide

{

_keyboardIsVisible = NO;

}

-  (BOOL)keyboardIsVisible

{

return _keyboardIsVisible;

}

  • 3四、objective-c中的词典对象、可变词典对象是哪一个,初始化一个含有两个键值对的可变词典对象,并动态的添 加和删除一条记录,输出第一条记录

词典NSDictionary,可变词典NSMutableDictionary, //初始化一个可变词典,带有2个键值对
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil]; //添加

[dic setObject:@"value3" forKey:@"key3"]; //删除
[dic removeObjectForKey:@"key3"]; //获取(按key获取)

[dic objectForKey:@"key1"];

3五、c和obj-c如何混用?

1)obj-c的编译器处理后缀为m的文件时,能够识别obj-c和c的代码,处理mm文件能够识别obj-c,c,c++代码,但cpp文件必须只

能用c/c++代码,并且cpp文件include的头文件中,也不能出现obj- c的代码,由于cpp只是cpp。

2) 在mm文件中混用cpp直接使用便可,因此obj-c混cpp不是问题

3)在cpp中混用obj- c其实就是使用obj-c编写的模块是咱们想要的。若是模块以类实现,那么要按照cpp class的标准写类的定 义,头文件中不能出现obj-c的东西,包括#import cocoa的。 实现文件中,即类的实现代码中可使用obj-c的东西,能够import,只是后缀是mm。若是模块以函数实现,那么头文件要按 c的格 式声明函数,实现文件中,c++函数内部能够用obj-c,但后缀仍是mm或m。总结:只要cpp文件和cpp include的文件中不包含 obj-c的东西就能够用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是obj-c编译后的o文 件,这个东西实际上是无差异的,因此能够用。obj-c的编译器支持cpp。

3六、举出5个以上你所熟悉的ios sdk库有哪些和第三方库有哪些?

ios-sdk:

Foundation.framework,CoreGraphics.framework,UIKit.framework, MediaPlayer.framework,

CoreAudio.framework

第三方库: 1.json编码解码;2.ASIHTTPRequest等相关协议封装;3.EGORefreshTableHeaderView下拉刷新代 码;4.AsyncImageView 异步加载图片并缓存;5.SDWebImage——简化网络图片处理

3七、objc优缺点----OC的特色:id类型,动态

objc优势:

1)Cateogies

2)Posing

3)动态识别

4)指标计算

5)弹性讯息传递

6)不是一个过分复杂的C衍生语言

7)Objective-C与C++可混合编程

缺点:

1)不支援命名空間

2)不支持运算符重载

3)不支持多重继承

4)使用动态运行时类型,全部的方法都是函数调用,因此不少编译时优化 方法都用不到。(如内联函数等),性能低劣。

3八、UITableView的重用机制?如何在一个view上显示多个tableView,tableView要求不一样的数据源以及不一样的样式 (要求自定义cell), 如何组织各个tableView的delegate和dataSource?请说说实现思路?在一个tableView 中须要自定义多种样式的cell(两种或三种),一般你如何实现,说说思路便可?UITableView的那些元素是能够自 定义的?

UITableView的重用机制:

查看UITableView头文件,会找到NSMutableArray*visiableCells,和NSMutableArray*reusableTableCells两 个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。 TableView显示之初,reusableTableCells为空,那么
tableView dequeueReusableCellWithIdentifier:CellIdentifier返回nil。开始的cell都 是经过 [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] 来创 建,并且cellForRowAtIndexPath只是调用最大显示cell数的次数。 好比:有100条数据,iPhone一屏最多显示10个cell。程序最开始显示TableView的状况是:

1. 用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] 建立10次cell,并给cell指定一样的重用标识(固然,能够为不一样显示类型的cell指定不一样的标识)。而且10个cell所有都加 入到 visiableCells数组,reusableTableCells为空。

2. 向下拖动tableView,当cell1彻底移出屏幕,而且 cell11(它也是alloc出来的,缘由同上)彻底显示出来的时候。 cell11加入到visiableCells,cell1移出 visiableCells,cell1加入到reusableTableCells。

3. 接着向下拖动tableView,由于reusableTableCells中已 经有值,因此,当须要显示新的cell, cellForRowAtIndexPath再次被调用的时 候,
tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。 cell1加入到visiableCells,cell1 移出reusableTableCells;cell2移出 visiableCells,cell2加入到reusableTableCells。以后再须要显示的Cell就可 以正常重用了

3九、一个tableView是否能够关联两个不一样的数据源?你会怎么处理?

首先从代码来看,数据源如何关联上的,其次是在数据源关联的代理方法里实现的。 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {

if(indexPath.section == 0) {}
if(indexPath.section == 1) {}

}

40、OC中有哪些数据存储方式,各有什么区别?
四种存储方式:

1.NSUserDefaults,用于存储配置信息

2.SQLite,用于存储查询需求较多的数据

3.CoreData,用于规划应用中的对象

4.使用基本对象类型定制的个性化缓存方案.

NSUserDefaults:对象中储存了系统中用户的配置信息,开发者能够经过这个实例对象对这些已有的信息进行修改,也 能够按照本身的需求建立新的配置项。

SQLite擅长处理的数据类型其实与NSUserDefaults差很少,也是基础类型的小数据,只是从组织形式上不一样。开发者可 以以关系型数据库的方式组织数据,使用SQL DML来管理数据。通常来讲应用中的格式化的文本类数据能够存放在数据库 中,尤为是相似聊天记录、Timeline等这些具备条件查询和排序需求的数据。

CoreData是一个管理方案,它的持久化能够经过SQLite、XML或二进制文件储存。它能够把整个应用中的对象建模并进 行自动化的管理。从归档文件还原模型时CoreData并非一次性把整个模型中的全部数据都载入内存,而是根据运行时状 态,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。 不管从设计原理仍是使用方法上看,CoreData都比较复杂。所以,若是仅仅是考虑缓存数据这个需求,CoreData绝对不 是一个优选方案。CoreData的使用场景在于:整个应用使用CoreData规划,把应用内的数据经过CoreData建模,彻底 基于CoreData架构应用。

使用基本对象类型定制的个性化缓存方案:从需求出发分析缓存数据有哪些要求:按Key查找,快速读取,写入不影响正常 操做,不浪费内存,支持归档。这些都是基本需求,那么再进一步或许还须要固定缓存项数量,支持队列缓存,缓存过时 等。
4一、ios平台怎么作数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?

iOS中能够有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data

coredata可使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处 理经常使用的功能,例如保存,恢复,撤销和重作,容许你在app中继续建立新的任务。在使用coredata的时候,你不用安装额外的数据 库系统,由于coredata使用内置的sqlite数据库。coredata将你app的模型层放入到一组定义在内存中的数据对象。coredata会 追踪这些对象的改变,同时能够根据须要作相应的改变,例如用户执行撤销命令。当coredata在对你app数据的改变进行保存的时 候,core data会把这些数据归档,并永久性保存。
mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。能够在多个平台使用,sqlite是一个轻 量级的嵌入式sql数据库编程。与coredata框架不一样的是,sqlite是使用程序式的,sql的主要的API来直接操做数据表。
Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite做为一种存储类型, 但它不能使用任意的SQLite数据库。Core Data在使用的过程种本身建立这个数据库。Core Data支持对1、对多的关系。

4二、OC中的数字对象都有哪些,简述它们与基本数据类型的区别是什么
Objective-C中的数字对象NSNumber; Objective-C中的基本类型和C语言中的基本类型同样.主要有:int,long,float,double,char,void,bool等. 对于基本类型变量,不须要用指针,也不用手动回收,方法执行结束会自动回收.数字对象须要指针,也须要手动回收内存。

4三、什么是动态识别,动态绑定?延展--程序的编译过程

4四、单件实例是什么?
Foundation 和 Application Kit 框架中的一些类只容许建立单件对象,即这些类在当前进程中的惟一实例。举例来讲, NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,它们 会向您传递单一实例的一个引用,若是该实例还不存在,则首先进行实例的分配和初始化。单件对象充当控制中心的角色, 负责指引或协调类的各类服务。

4五、如何将产品进行多语言发布?

程序国际化;

好比:本地化应用程序名称

(一、选中工程,Info—Localizations点击“+”添加要国际化的语言。 (二、在InfoPlist.strings右边会多出一个三角形,点击展开可看到InfoPlish.strings(english)和

InfoPlish.strings(chinese)两个版本的文件; (三、在InfoPlish.strings(english)文件中加入:

CFBundleDisplayName ="Program"; 其中“Program”为英文应用程序名称,同理在InfoPlish.strings(chinese)文件中加入: CFBundleDisplayName ="应用程序"; 其中“应用程序”为中文名称,注意:CFBundleDisplayName加不加双引号都行;

(四、编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其 value设置为YES便可。

4六、什么是动态连接库和静态连接库?调用一个类的静态方法需不须要release?程序的编译过程--连接---静态链接库就是把(lib)文件中用到的函数代码直接连接进目标程序,程序运行的时候再也不须要其它的库文件;动态连接就是 把调用的函数所在文件模块 (DLL)和调用函数在文件中的位置等信息连接进目标程序,程序运行的时候再从DLL中寻找 相应函数代码,所以须要相应DLL文件的支持。 静态连接库和动态连接库的另一个区别在于静态连接库中不能再包含其余的动态连接库或者静态库,而在动态连接库中还 能够再包含其余的动态或静态连接库。

动态的是:运行时才加载到内存中,静态:编译时就加载到内存中 静态方法也就是类方法,不须要release

4七、声明一个静态方法和一个实例方法?

解释:就是类方法和对象方法,

4八、什么是push?远程推送?

第一步:UIApplication向APNS注册push notification服务

一、应用程序 要支持 推送服务(在网页里配置)

(1)https://developer.apple.com/devcenter/ios/index.action

(2)登陆 苹果开发者帐号(注意是收费帐号,$99或$299)

3)下载push证书(主要是给程序签名,push服务只有收费开发者才具有。因此须要签名验证),若是没有 push证书,建立一个push证书(App ID->钥匙串程序生成request->push证书)

注意事项:App ID的 Bundle ID必须和程序plist文件里的Bundle identifier一致。App ID一旦生成,将不可修改。

(4)把证书安装到钥匙串里(双击证书文件)

(5)生成 编译程序 用的描述文件(网页里进行)

二、向APNS注册push服务(UIApplication的registerForRemoteNotificationTypes:方法)

第二步 获取APNS分配的DeviceToken(64位16进制串)

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

第三步 把DeviceToken发送给本身的后台服务器,服务器记录每台设备的DeviceToken以便往后推送信息给客 户端。(须要有一个网络接口,让客户端发送DeviceToken)

第四步 服务器推送信息给客户端

一、服务器除了须要有客户端的DeviceToken以外,还要有push证书,对push的内容进行签名。(苹果为了防 止 恶意向客户端(好比DeviceToken泄露了)发送消息,每次推送消息,都须要证书进行签名,从而避免***恶 意***用户手机。)

二、若是你的服务器是java写的,能够直接使用钥匙串导出的p12文件(证书和密钥一块儿导出)。若是你的服务器 是php写的,由于php语言不支持p12文件类型,须要转换为pem文件。

三、将p12转换为pem文件:终端 先找到你p12所在的目录 openssl pkcs12 -in CertificateName.p12 - outCertificateName.pem -nodes

四、服务器发送信息给APNS,APNS自动将信息推送给客户端
第五步 客户端处理收到的信息

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

注意事项

一、测试版的push证书仅仅用于开发期间测试,发布版的程序须要生成一个发布版的push证书。

二、测试版APNS的ssl地址和发布版的ssl地址不一样

三、测试版的DeviceToken和发布版的DeviceToken也不一样

四、php文件要喝pem文件放在同一目录。

五、除了alert sound和badge以外,json串里还能够包含自定义信息。

六、推送的信息最大255字节

七、推送的信息受网络影响较大,有可能形成延迟甚至丢失,重要信息的传递不该该使用push通知,应该有专门的 后台接口。

八、借助push推送,两个客户端能够实现即时通讯,工程里面存放咱们的p12文件,客户端本身组织json串,发 送请求到APNS。
4九、什么是沙箱模型?哪些操做是属于私有api范畴?

某个iphone工程进行文件操做有此工程对应的指定的位置,不能逾越。 iphone常见私有api的应用(好比直接发送短信,访问沙箱以外的磁盘文件).

50、如何将敏感字变成** 延展---几个字变为几个*如何实现?

调用stringByReplacingOccurrencesOfString:withString:给定字符串,指定替换字,替换**

5一、iphone阅读器,若是要读取一个文本文件,请问你是如何处理编码问题的?另外像pdf格式的文件,你如何读

取?

首先检测文本编码格式(只需读取小部分用来判断), iphone手机阅读器中对于PDF格式的阅读,能够直接用UIWebView控件显示,也能够从网上下到不少直接读取pdf格式 的代码
直接从pdf中获得数据。复杂表格动画- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
-(void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation: (UITableViewRowAnimation)animation;- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

5二、在开发大型项目的时候,如何进行内存泄露检测的? 内存泄露怎么处理?

如何检测内存泄露:

能够经过xcode的自带工具run---start with performance tool里有instruments下有个leaks工具,启动此工具 后,运行项目,工具里能够显示内存泄露的状况,双击可找到源码位置,能够帮助进行内存泄露的处理。 如何处理:先定位到具体位置, 再解决之。
5三、iphone app为何会被打回来,如何制止?

app的设置界面、按钮使用了相似iphone的操做方式以及icon的圆角设计 -> 从新设计

 app的年龄设置过低 -> 改了年龄
 

app里有实物奖励 -> 免责声明,和苹果无关
 

app描述里提了后续版本的功能的字样 -> 删除
 

app有打分的功能 -> 有reject的,也有经过的

 app须要使用location,没有提示用户 -> 加了提示,容许用户拒绝
 

app没提供测试帐号 -> 提供

app里有私有api -> 修改

应用内含有有某公司LOGO的图片,没有该公司受权文件,被拒-> 修改

第三方静态库包含私有api的调用(联系第三方技术支持,更新静态库);

包含潜在的***,暴力等内容(调整应用年龄限制等级,并加入举报功能) 作浏览器的,分级必须选17+

5四、iphone应用程序的项目基本结构?

· Classes -> 源程序文件(.h、.m)

· Other Sources-> main.m 等,不须要程序员修改 -Prefix.pch

· Resources -> 界面文件(.xib)、配置文件-info.plist

· Frameworks -> 连接的库· Targets -> 项目的不一样Target(资源、编译配置不一样)

· Executables -> 项目中全部的可执行文件 -Prefix.pch:_Prefix为全部的项目程序文件预先配置运行环境的前缀标头,在程序运行以前,引入所需框架中的(.h)头文 件。这样能够减小每一个头文件对程序编译作出相同的定义,在巨型的应用程序项目开发中节省大量的时间,例如,程序有 100个根文件须要定义abc.h,只须要在_Preix.pch文件下创建一个对象,全部的根文件即可以重复地对程序编译作出定 义。

5五、请写出代码,用blocks来取代上例中的protocol,并比较两种方法的优点。实际应用部分?请写出代码,用

blocks取代协议或回调方法

5六、你作iphone开发时候,有哪些传值方式,view和view之间是如何传值的?

block, target-action ,代理,属性,

5七、给定的一个字符串,判断字符串中是否还有png,有就删除它?

NSMutableString *mstr=[NSMutableString stringWithFormat:@"ccc"];

NSRange substr = [mstr rangeOfString:@"png"]; //字符串查找,能够判断字符串中是否有

if (substr.location != NSNotFound) {
[mstr deleteCharactersInRange:substr];

}

5八、编译语言和解释语言的区别

区别:C语言,OC语言属于编译语言;

解释语言:也能够理解为脚本文件,不须要编译, 编译型语言写的程序执行以前,须要一个专门的编译过程,把程序编译成为机器语言的文件,好比exe文件,之后要运行的 话就不用从新翻译了,直接使用编译的结果就好了(exe文件),由于翻译只作了一次,运行时不须要翻译,因此编译型语 言的程序执行效率高,但也不能一律而论,部分解释型语言的解释器经过在运行时动态优化代码,甚至可以使解释型语言的 性能超过编译型语言。

解释则不一样,解释性语言的程序不须要编译,省了道工序,解释性语言在运行程序的时候才翻译, 好比解释性basic语言,专门有一个解释器可以直接执行basic程序,每一个语句都是执行的时候才翻译。这样解释性语言每 执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。
5九、对于语句NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对

象?

编译时是NSString,运行时是NSDate

60、给用户推送的通知的伪代码
6一、ViewController的 loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时

候调用的?在自定义ViewController的时候这几个函数里面应该作什么工做?

一、viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用

二、viewDidUnload当系统内存吃紧的时候会调用该方法,在该方法中将全部IBOutlet(不管是property仍是实例变量) 置 为nil(系统release view时已经将其release掉了)在该方法中释放其余与view有关的对象、其余在运行时建立(但 非系统必须)的对象、在viewDidLoad中 被建立的对象、缓存数据等 release对象后,将对象置为nil(IBOutlet只须要 将其置为nil,系统release view时已经将其release掉了) dealloc方法,viewDidUnload和dealloc方法没有关联,dealloc仍是继续作它该作的事情
流程应该是这样:
(loadView/nib文件)来加载view到内存 -->viewDidLoad函数进一步初始化这些view -->内存不足时,调用 viewDidUnload函数释放views -->当须要使用view时有回到第一步
如此循环

四、viewWillAppear方法,视图即将过渡到屏幕上时调用,(通常在返回须要刷新页面时,我都选择使用代理,因此不多用到)

五、viewWillDisappear方法,这个A->B以后,A在B以后的操做
6二、描述程序启动的顺序

一、main.m是程序的入口

二、UIApplicationMain()建立应用程序对象,而且为此对象指定委托,检测程序的执行,同时开启事件循环,处理程序接收到的事 件

三、UIApplicationDelegate方法的执行

四、加载window

五、指定根视图控制器

六、在指定的试图控制器中添加控件,实现应用程序界面

6三、OC中是全部对象间的交互是如何实现的?经过指针实现的

6四、objective-c中的类型转换分为哪几类?

可变与不可变之间的转化; 可变与可变之间的转化;

不可变与不可变之间。

6五、获取项目根路径,并在其下建立一个名称为userData的目录?

// 获取根路径


NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:];

// 建立文件系统管理器

NSFileManager *fileManager = [[NSFileManager alloc] init];

// 判断userData目录是否存在

if(![fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]]) {

// 不存在,建立一个userData目录
[fileManager createDirectoryAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]withIntermediateDirectories:false attributes:nil error:nil];
}

6六、目标-动做机制

目标是动做消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量的形式保有其动做消息的目标。

动做是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动做而实现 的方法。 程序须要某些机制来进行事件和指令的 翻译。这个机制就是目标-动做机制。
参考target-action
6七、浅复制和深复制的区别?

浅层复制(copy):只复制指向对象的指针,而不复制引用对象自己。//经过对象的指针来访问这个对象----只赋值地址 深层复制(mutableCopy):复制引用对象自己---再建立一个对象 意思就是有个A对象,复制一份后获得A_copy对象后,对于浅复制来讲,A和A_copy指向的是同一个内存资源,复制的 只不过是是一个指针,对象自己资源 仍是只有一份,那若是咱们对A_copy执行了修改操做,那么发现A引用的对象一样被修改,这其实违背了咱们复制拷贝的一 个思想。深复制就好理解了,内存中存在了

两份独立对象自己。//当修改A时,A copy不变。

6八、obc中可修改和不能够修改类型可修改不可修改的集合类。

这个我我的简单理解就是可动态添加修改和不可动态添加修改同样。好比NSArray和 NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者能够添加等,能够动态申请新的内存空间。

6九、什么是安全释放?
    [_instance release],_instance = nil;
    70、类变量的@protected ,@private,@public,@package声明各有什么含义?

变量的做用域不一样,@protected 该类和全部子类中 的方法能够直接访问这样的变量,这是默认的;
@private 该类中的方法能够访问这样的变量,子类不能够; @public除了本身和子类方法外,也能够被其余类或者其余模块中的方法访问;
@package 目前还没有得出结论
    71OC中异常exception 怎么捕获?不一样的CPU结构上开销怎样?C中又什么相似的方法?了解一下异常捕获
CPU的开销:

7二、关于Objective-C++中的异常处理,能够相互捕获到吗?
不能够;
7三、for(int index = 0; index < 20; index ++){NSString *tempStr =

@”tempStr”;NSLog(tempStr);NSNumber *tempNumber = [NSNumber numberWithInt: 2];NSLog(tempNumber);}这段代码有什么问题.?会不会形成内存泄露(多线程)?在内存紧张的设备上作大 循环时自动释放池是写在循环内好仍是循环外好?为何?

7四、什么是序列化或者Acrchiving,能够用来作什么,怎样与copy结合,原理是什么?.
序列化就是:归档7五、runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的

timer事件,touch事件等.---NSRunLoop,NSTimer须要本身实现----GCD的返回主线程的方法,看前面的题

run loop,正如其名称所示,是线程进入和被线程用来响应事件以及调用事件处理函数的地方。须要在代码中使用控制语 句实现run loop的循环,也就是说,须要代码提供while 或者 for循环来驱动run loop。在这个循环中,使用一个 runloop对象[NSRunloop currentRunloop]执行接收消息,调用对应的处理函数。7六、描述下拉刷新的实现机制?

获取数据,刷新页面

7七、什么是沙盒?沙盒包含哪些文件,描述每一个文件的使用场景。如何获取这些文件的路径?如何获取应用程序包 中文件的路径?

沙盒是某个iphone工程进行文件操做有此工程对应的指定的位置,不能逾越。 包括:四个文件夹:documents,tmp,app,Library。 手动保存的文件在documents文件里。 Nsuserdefaults保存的文件在tmp文件夹里。

Documents 目录:您应该将全部de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该按期备 份的信息。AppName.app 目录:这是应用程序的程序包目录,包含应用程序的自己。因为应用程序必须通过签名,因此 您在运行时不能对这个目录中的内容进行修改,不然可能会使应用程序没法启动。Library 目录:这个目录下有两个子目 录:Caches 和 PreferencesPreferences 目录包含应用程序的偏好设置文件。您不该该直接建立偏好设置文件,而是 应该使用NSUserDefaults类来取得和设置应用程序的偏好.Caches 目录用于存放应用程序专用的支持文件,保存应用程 序再次启动过程当中须要的信息。tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程当中不须要的信息。

获取这些目录路径的方法:
1,获取家目录路径的函数:
NSString *homeDir = NSHomeDirectory();
2,获取Documents目录路径的方法:
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3,获取Caches目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4,获取tmp目录路径的方法:
NSString *tmpDir = NSTemporaryDirectory();
5,获取应用程序程序包中资源文件路径的方法:
例如获取程序包中一个图片资源(apple.png)路径的方法:
NSString *p_w_picpathPath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”]; UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:p_w_picpathPath]; 代码中的mainBundle类方法用于返回一个表明应用程序包的对象。
7八、介绍一下XMPP?有什么优缺点吗?
XMPP(Extensible Messaging and Presence Protocol,前称)是一种以XML为基础的开放式实时通讯协议,是 经由互联网工程工做小组(IETF)经过的互联网标准。简单的说,XMPP就是一种协议,一种规定。就是说,在网络上传 东西,要创建链接,TCP/IP链接,创建后再传东西,而XMPP就是规定你传的东西的格式。XMPP是基于XML的协议。优势
开放:

XMPP协议是自由、开放、公开的,而且易于了解。 并且在客户端 、 服务器 、 组件 、 源码库等方面,都已经各自有多种实现。 标准:

互联网工程工做小组( IETF )已经将Jabber的核心XML流协议以XMPP之名,正式列为承认的实时通讯及Presence技术。 而XMPP的技术规格已被定义在RFC 3920及RFC 3921 。 任何IM供应商在遵循XMPP协议下,均可与Google Talk实现链接。 证明可用:

第一个Jabber(如今XMPP)技术是Jeremie Miller在1998年开发的,如今已经至关稳定;数以百计的开发者为XMPP技术而努 力。 今日的互联网上有数以万计的XMPP服务器运做着,并有数以百万计的人们使用XMPP实时传讯软件。
分散式:

XMPP网络的架构和电子邮件十分相像;XMPP核心协议通讯方式是先建立一个stream,XMPP以TCP传递XML数据流,没有 中央主服务器。 任何人均可以运行本身的XMPP服务器,使我的及组织可以掌控他们的实时传讯体验。
安全:

任何XMPP协议的服务器能够独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自 带于核心XMPP技术规格中。
可扩展:

XML 命名空间的威力可以使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会 。 弹性佳:

XMPP除了可用在实时通讯的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。 多样性:

用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各类领域;用XMPP技术开发软件,资源及支持的 来源是多样的,使得使你不会陷于被“绑架”的困境。
缺点
数据负载过重:

随着一般超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的 数据提供给多个收件人。 新的议定书正在研究,以减轻这一问题。
没有二进制数据:
XMPP协议的方式被编码为一个单一的长的XML文件,所以没法提供修改二进制数据。 所以, 文件传输协议同样使用外部的 HTTP。 若是不可避免,XMPP协议还提供了带编码的文件传输的全部数据使用的Base64 。 至于其余二进制数据加密会话 (encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
7九、谈谈对性能优化的见解,如何作?控制好内存,不用的内存实时释放;冗余代码;用户体验度;耗时操做,开线程进行处理80、写一个递归方法:计算N的阶乘,而后将计算结果进行存储。以便应用退出后下次启动可直接获取该值。开启一个线程,在线程种实现递归的方法,将结果存到本地,下次运行时先看本地,没有在运行这个递归方法。--

---用代码实现----

8一、简述应用程序按Home键进入后台时的生命周期,和从后台回到前台时的生命周期?应用程序:
-[AppDelegate application:willFinishLaunchingWithOptions:]
-[AppDelegate application:didFinishLaunchingWithOptions:]

-[AppDelegate applicationDidBecomeActive:] 退到后台:
-[AppDelegate applicationWillResignActive:] -[AppDelegate applicationDidEnterBackground:] 回到前台:

-[AppDelegate applicationWillEnterForeground:] -[AppDelegate applicationDidBecomeActive:]ViewController之间
加载页面:

-[mainViewController viewDidLoad] -[mainViewController viewWillAppear:] -[mainViewController viewWillLayoutSubviews] -[mainViewController viewDidLayoutSubviews] -[mainViewController viewDidAppear:] 退出当前页面:

-[mainViewController viewWillDisappear:]
-[mainViewController viewDidDisappear:]
返回以前页面:
-[mainViewController viewWillAppear:]
-[mainViewController viewWillLayoutSubviews]
-[mainViewController viewDidLayoutSubviews]
-[mainViewController viewDidAppear:]
8二、简述值传递和引用传递的区别?所谓值传递,就是说仅将对象的值传递给目标对象,就至关于copy;系统将为目标对象从新开辟一个彻底相同的内存空间。 所谓引用传递,就是说将对象在内存中的地址传递给目标对象,就至关于使目标对象和原始对象对应同一个内存存储空间。此时,如 果对目标对象进行修改,内存中的数据也会改变。8三、NSArray和NSMutableArray的区别,多线程操做哪一个更安全?NSArray更安全,当同时被访问时,NSArray是不可改变8四、当前有一个数组,里面有若干重复的数据,如何去除重复的数据?(会几个写几个)能够由数组,到集合。。。。

8五、isKindOfClass、isMemberOfClass、selector做用分别是什么isKindOfClass,做用是,某个对象属于某个类型,包括继承的类型--- isMemberOfClass:某个对象确切属于某个类型,是否是具体的实例 selector:经过方法名,获取在内存中的函数的入口地址8六、写出下面程序段的输出结果

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a string value" forKey:@"akey"]; NSLog(@"%@", [dict objectForKey:@"akey"]);
[dict release];
打印输出 a string value,而后崩溃----缘由:便利构造器建立的对象,以后的release,会形成过分释放8七、请写出如下代码的执行结果

NSString * name = [ [ NSString alloc] init ];
name = @”Habb”;
[ name release];
打印输出结果是: Habb,在[name release]先后打印均有输出结果 ---会形成内存泄露---原先指向的区域变成了野指针,以后的释放,不能释放以前建立的区域

8八、请分别写出SEL、id、@的意思?SEL是“selector”的一个类型,表示一个方法的名字-------就是一个方法的入口地址 id是一个指向任何一个继承了Object(或者NSObject)类的对象。须要注意的是id是一个指针,因此在使用id 的时候不须要加*。

@:OC中的指令符

8九、以.mm为拓展名的文件里,能够包含的代码有哪些?.mm是oc和C++混编类型文件后缀,给编译器识别的。90、说说如何进行后台运行程序?
答:判断是否支持多线程

UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported; 声明你须要的后台任务Info.plist中添加UIBackgroundModes键值,它包含一个或多个string的值,包括audio:在后台提供声音 播放功能,包括音频流和播放视频时的声音 location:在后台能够保持用户的位置信息 voip:在后台使用VOIP功能 前面的每一个value让系统知道你的应用程序应该在适当的时候被唤醒。例如,一个应用程序,开始播放音乐,而后移动到后台仍然须要 执行时间,以填补音频输出缓冲区。添加audio键用来告诉系统框架,须要继续播放音频,而且能够在合适的时间间隔下回调应用程 序;若是应用程序不包括此项,任何音频播放在移到后台后将中止运行。除了添加键值的方法,IOS还提供了两种途径使应用程序在后 台工做:
Task completion—应用程序能够向系统申请额外的时间去完成给定的任务
Local notifications—应用程序能够预先安排时间执行local notifications 传递实现长时间的后台任务:应用程序能够请求在后台 运行以实现特殊的服务。这些应用程序并不连续的运行,可是会被系统框架在合适的时间唤醒,以实现这些服务
9一、你了解svn,cvs等版本控制工具么?
版本控制 svn,cvs 是两种版控制的器,须要配套相关的svn,cvs服务器。scm是xcode里配置版本控制的地方。版本控制 的原理就是a和b同时开发一个项目,a写完当天的代码以后把代码提交给服务器,b要作的时候先从服务器获得最新版本, 就能够接着作。 若是a和b都要提交给服务器,而且同时修改了同一个方法,就会产生代码冲突,若是a先提交,那么b提交 时,服务器能够提示冲突的代码,b能够清晰的看到,并作出相应的修改或融合后再提交到服务器。

相关文章
相关标签/搜索