ios面試題7

三.數(shù)據(jù)存儲

1.數(shù)據(jù)存儲技術(shù)

1>?數(shù)據(jù)存儲的幾種方式?

XML屬性列表(plist)歸檔

Preference(偏好設(shè)置)

NSKeyedArchiver歸檔(NSCoding)

SQLite3

Core Data

2>?各自特點

Plist:

屬性列表是一種XML格式的文件阶牍,拓展名為plist

如果對象是NSString冰单、NSDictionary、NSArray喝滞、NSData猴誊、NSNumber等類型潦刃,就可以使用writeToFile:atomically:方法直接將對象寫到屬性列表文件中

?將一個NSDictionary對象歸檔到一個plist屬性列表中

//?將數(shù)據(jù)封裝成字典

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

[dict setObject:@"母雞" forKey:@"name"];

//?將字典持久化到Documents/stu.plist文件中

[dict writeToFile:path atomically:YES];


面試考點:

1.??plist的根節(jié)點只能是NSDictionary和NSArray,所以存儲內(nèi)容必須轉(zhuǎn)為對象類型

2.??使用場景?功能動態(tài)更新應(yīng)用級別數(shù)據(jù)更新?XML的替代品


偏好設(shè)置:

每個應(yīng)用都有個NSUserDefaults實例懈叹,通過它來存取偏好設(shè)置

比如乖杠,保存用戶名、字體大小澄成、是否自動登錄

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:@"itcast" forKey:@"username"];

[defaults setFloat:18.0f forKey:@"text_size"];

[defaults setBool:YES forKey:@"auto_login"];


面試考點:

1.??使用場景保存應(yīng)用信息

2.??特點?不會自動刪除胧洒,itune同步畏吓,不適合存大數(shù)據(jù)

3.??使用單例模式、

4.??直接存取結(jié)構(gòu)體卫漫,基本數(shù)據(jù)類型菲饼,無需轉(zhuǎn)換

5.??即時操作注意同步


歸檔:

如果對象是NSString、NSDictionary汛兜、NSArray巴粪、NSData、NSNumber等類型粥谬,可以直接用NSKeyedArchiver進行歸檔和恢復(fù)

不是所有的對象都可以直接用這種方法進行歸檔肛根,只有遵守了NSCoding協(xié)議的對象才可以

NSCoding協(xié)議有2個方法:

encodeWithCoder:

每次歸檔對象時,都會調(diào)用這個方法漏策。一般在這個方法里面指定如何歸檔對象中的每個實例變量派哲,可以使用encodeObject:forKey:方法歸檔實例變量

initWithCoder:

每次從文件中恢復(fù)(解碼)對象時,都會調(diào)用這個方法掺喻。一般在這個方法里面指定如何解碼文件中的數(shù)據(jù)為對象的實例變量芭届,可以使用decodeObject:forKey方法解碼實例變量

歸檔一個NSArray對象到Documents/array.archive

NSArray *array = [NSArray arrayWithObjects:@”a”,@”b”,nil];

[NSKeyedArchiver archiveRootObject:array toFile:path];


?使用archiveRootObject:toFile:方法可以將一個對象直接寫入到一個文件中,但有時候可能想將多個對象寫入到同一個文件中感耙,那么就要使用NSData來進行歸檔對象

??歸檔(編碼)

//?新建一塊可變數(shù)據(jù)區(qū)

NSMutableData *data = [NSMutableData data];

//?將數(shù)據(jù)區(qū)連接到一個NSKeyedArchiver對象

NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];

//?開始存檔對象褂乍,存檔的數(shù)據(jù)都會存儲到NSMutableData中

[archiver encodeObject:person1 forKey:@"person1"];

[archiver encodeObject:person2 forKey:@"person2"];

//?存檔完畢(一定要調(diào)用這個方法)

[archiver finishEncoding];

//?將存檔的數(shù)據(jù)寫入文件

[data writeToFile:path atomically:YES];


????恢復(fù)(解碼)

//?從文件中讀取數(shù)據(jù)

NSData *data = [NSData dataWithContentsOfFile:path];

//?根據(jù)數(shù)據(jù),解析成一個NSKeyedUnarchiver對象

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

Person *person1 = [unarchiver decodeObjectForKey:@"person1"];

Person *person2 = [unarchiver decodeObjectForKey:@"person2"];

//?恢復(fù)完畢

[unarchiver finishDecoding];


利用歸檔實現(xiàn)深復(fù)制

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person1];

//?解析data即硼,生成一個新的Person對象

Student *person2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];


?面試考點:

1.??特點:存入Document逃片,itune同步,不會自動刪除只酥,可存放大型用戶數(shù)據(jù)

2.??使用場景:用戶產(chǎn)生的數(shù)據(jù)褥实,如游戲,操作記錄等等

3.??可保存自定義對象裂允,需要遵守NSCoding協(xié)議损离,實現(xiàn)對應(yīng)的encodeWithCoder?initWithCoder?方法

4.??和NSData的配合

4.1>?多對象單目錄存儲

4.2>?字典/數(shù)組內(nèi)容的深拷貝

5.??不能直接存基本類型和結(jié)構(gòu)體,需要轉(zhuǎn)成對象?NSValue NSNumber


2>?沙盒目錄結(jié)構(gòu)

2.1> Library Caches Preferences

2.2> Documents

2.3> tmp

3>?如何讀取沙盒中plist的內(nèi)容

1>?3.1>?讀取沙盒并拼接plist的文件路徑?

??????NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];

?3.2>?根據(jù)plist根節(jié)點類型讀取plist文件

NSArray *apps = [NSArray arrayWithContentsOfFile:path];


2.數(shù)據(jù)庫技術(shù)(SQLite&CoreData)

1> SQLite和CoreData的區(qū)別

1.1> CoreData可以在一個對象更新時,其關(guān)聯(lián)的對象也會隨著更新,相當于你更新一張表時,其關(guān)聯(lián)的其他表的也回隨著更新

1.2> CoreData提供更簡單的性能管理機制,可以限制查詢記錄的總數(shù),這個類會自動更新其緩存

1.3>?多表查詢方面,CoreData沒有SQL直觀,沒有類似外連接,左連接等操作.


iOS App升級安裝 - CoreData數(shù)據(jù)庫升級

1.選中你的mydata.xcdatamodeld文件绝编,選擇菜單editor->Add Model Version?比如取名:mydata2.xcdatamodel

2.設(shè)置當前版本

3..修改新數(shù)據(jù)模型mydata2僻澎,在新的文件上添加字段及表

4.刪除原來的類文件,重新生成下類十饥。在appdelegate中添加*optionsDictionary窟勃,原來options:nil?改成options:optionsDictionary

5.重新編譯下程序。

增加模型版本——->選擇最新的版本——->選擇表绷跑,添加字段——>刪除之前的類拳恋,重新生成。


2> iOS內(nèi)存區(qū)域

2.1>棧區(qū)

由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等.其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧.

2.2>堆區(qū)

一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時由系統(tǒng)回收

2.3>全局區(qū)(靜態(tài)區(qū))

全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量相鄰的另一塊區(qū)域.

全局區(qū)分為未初始化全局區(qū): .bss段和初始化全局區(qū): data段.

2.4>常量區(qū)

常量字符串就是放在常量區(qū)

2.5>代碼區(qū)

存放函數(shù)體的二進制代碼


3.?你是如何優(yōu)化內(nèi)存管理

1>使用ARC

2>延遲加載?懶加載?

3>重用?在正確的地方使用reuseIndentifier?

4>緩存?NSCache?保存計算數(shù)據(jù)

5>處理內(nèi)存警告?移除對緩存砸捏,圖片object?和其他一些可以重創(chuàng)建的objects?的強引用

?5.1> app delegate?中使用`applicationDidReceiveMemoryWarning:`?的方法

?5.2>?自定義UIViewController?的子類(subclass)?中覆蓋`didReceiveMemoryWarning`

?5.3>?在自定義類中注冊并接收UIApplicationDidReceiveMemoryWarningNotification?的通知

6>重用大開銷對象?NSDateFormatter?和NSCalendar?懶加載/單例?_formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy”;?設(shè)置和創(chuàng)建速度一樣慢

7>自動釋放池?手動添加自動釋放池

8>是否緩存圖片imageNamed?imageWithContentOfFile

9>混編

10>循環(huán)引用?delegate block nstimer

11>?移除kvo?nsnotificationcenter?并未強引用,只記錄內(nèi)存地址,野指針報錯?UIViewController自動移除?一般在dealloc中

13> performselector?延遲操作??[NSObject cancelPreviousPerformRequestsWithTarget:self]


4.?循環(huán)引用

delegate屬性的內(nèi)存策略

block循環(huán)引用?實際場景

5. autorelease的使用

1>工廠方法為什么不釋放對象

很多類方法為了在代碼塊結(jié)束時引用的對象不會因無強引用而被釋放內(nèi)存采用自動釋放的方式,當其最近的自動釋放池釋放時該對象才會釋放.

2> ARC下autorelease的使用場景

ARC中手動添加autoreleasepool可用于提前釋放使用自動釋放策略的對象,防止大量自動釋放的對象堆積造成內(nèi)存峰值過高.

3>自動釋放池如何工作

自動釋放池時棧結(jié)構(gòu),每個線程的runloop運行時都會自動創(chuàng)建自動釋放池,程序員可以代碼手動創(chuàng)建自動釋放池,自動釋放的對象會被添加到最近的(棧頂)自動釋放池中,系統(tǒng)自動創(chuàng)建的自動釋放池在每個運行循環(huán)結(jié)束時銷毀釋放池并給池中所有對象發(fā)release消息,手動創(chuàng)建釋放池在所在代碼塊結(jié)束時銷毀釋放池并發(fā)消息統(tǒng)一release


避免內(nèi)存峰值

SDWebimage中加載gif圖片?大循環(huán)

棧結(jié)構(gòu)棧頂

統(tǒng)一發(fā)release消息


5>ARC的實現(xiàn)原理

在程序預(yù)編譯階段,將ARC?的代碼轉(zhuǎn)換為非ARC?的代碼,自動加入release谬运、autorelease隙赁、retain

6.Runloop

1>?每個線程上都有一個runloop,主線程默認開啟,輔助線程需要手動開啟,主要用于

??使用端口或自定義輸入源來和其他線程通信

??使用線程的定時器

??Cocoa中使用任何performSelector…的方法

??使線程周期性工作

2> runloop的工作流程

7?Core Graphics繪圖的步驟:

獲取上下文(畫布)

創(chuàng)建路徑(自定義或者調(diào)用系統(tǒng)的API)并添加到上下文中。

進行繪圖內(nèi)容的設(shè)置(畫筆顏色梆暖、粗細伞访、填充區(qū)域顏色、陰影轰驳、連接點形狀等)

開始繪圖(CGContextDrawPath)

釋放路徑(CGPathRelease)?

(1)核心圖形Core Graphics是用來實現(xiàn)用戶界面視覺設(shè)計方案的重要技術(shù)框架

(2)核心動畫Core Animation提供了一套用于創(chuàng)建和渲染動態(tài)交互效果的簡單易行的解決方案,通過與UIKit的緊密配合厚掷,核心動畫可以將界面交互對象與動畫過渡效果進行完美地整合。

(3)UIkit是用來打造iOS應(yīng)用的最重要的圖形技術(shù)框架级解,它提供了用于構(gòu)造觸屏設(shè)備用戶界面的全部工具和資源冒黑,并在整個交互體驗的塑造過程中扮演著至關(guān)重要的角色

8點講動畫和layer ,view的區(qū)別

1)觸摸

2)layer?特有

3)不觸摸的替代

4)屬性

5)為什么不合二為1

6)高級用法

1.圖層與視圖

一個視圖就是在屏幕上顯示的一個矩形塊(比如圖片,文字或者視頻)勤哗,它能夠1)攔截類似于鼠標點擊或者觸摸手勢等用戶輸入抡爹。視圖在層級關(guān)系中可以互相嵌套,一個視圖可以管理它的所有子視圖的位置芒划。

所有的視圖都從一個叫做UIVIew的基類派生而來冬竟,UIView可以處理觸摸?2)(layer不行,但是layer有錨點和position的概念選裝變換的時候用),可以支持基于Core Graphics繪圖民逼,可以做仿射變換(例如旋轉(zhuǎn)或者縮放)泵殴,或者簡單的類似于滑動或者漸變的動畫。

CALayer類在概念上和UIView類似拼苍,同樣也是一些被層級關(guān)系樹管理的矩形塊笑诅,同樣也可以包含一些內(nèi)容(像圖片,文本或者背景色)映屋,管理子圖層的位置苟鸯。它們有一些方法和屬性用來做動畫和變換同蜻。和UIView最大的不同是CALayer不處理用戶的交互棚点。

CALayer并不清楚具體的響應(yīng)鏈(iOS通過視圖層級關(guān)系用來傳送觸摸事件的機制),于是它并不能夠響應(yīng)事件湾蔓,即使3)它提供了一些方法來判斷是否一個觸點在圖層的范圍之內(nèi)瘫析。

2.平行的層級關(guān)系

?4)每一個UIview都有一個CALayer實例的圖層屬性,也就是所謂的backing layer默责,視圖的職責(zé)就是創(chuàng)建并管理這個圖層贬循,以確保當子視圖在層級關(guān)系中添加或者被移除的時候,他們關(guān)聯(lián)的圖層也同樣對應(yīng)在層級關(guān)系樹當中有相同的操作桃序。

實際上這些背后關(guān)聯(lián)的圖層才是真正用來在屏幕上顯示和做動畫杖虾,UIView僅僅是對它的一個封裝,提供了一些iOS類似于處理觸摸的具體功能媒熊,以及Core Animation底層方法的高級接口奇适。

????5)但是為什么iOS要基于UIView和CALayer提供兩個平行的層級關(guān)系呢坟比?為什么不用一個簡單的層級來處理所有事情呢?原因在于要做職責(zé)分離嚷往,這樣也能避免很多重復(fù)代碼葛账。在iOS和Mac OS兩個平臺上,事件和用戶交互有很多地方的不同皮仁,基于多點觸控的用戶界面和基于鼠標鍵盤有著本質(zhì)的區(qū)別籍琳,這就是為什么iOS有UIKit和UIView,但是Mac OS有AppKit和NSView的原因贷祈。他們功能上很相似趋急,但是在實現(xiàn)上有著顯著的區(qū)別。

?繪圖势誊,布局和動畫宣谈,相比之下就是類似Mac筆記本和桌面系列一樣應(yīng)用于iPhone和iPad觸屏的概念。把這種功能的邏輯分開并應(yīng)用到獨立的Core Animation框架键科,蘋果就能夠在iOS和Mac OS之間共享代碼闻丑,使得對蘋果自己的OS開發(fā)團隊和第三方開發(fā)者去開發(fā)兩個平臺的應(yīng)用更加便捷。

????實際上勋颖,這里并不是兩個層級關(guān)系嗦嗡,而是四個,每一個都扮演不同的角色饭玲,除了視圖層級和圖層樹之外侥祭,還存在呈現(xiàn)樹和渲染樹,將在第七章“隱式動畫”和第十二章“性能調(diào)優(yōu)”分別討論茄厘。

3.圖層的能力

如果說CALayer是UIView內(nèi)部實現(xiàn)細節(jié)矮冬,那我們?yōu)槭裁匆娴亓私馑兀刻O果當然為我們提供了優(yōu)美簡潔的UIView接口次哈,那么我們是否就沒必要直接去處理Core Animation的細節(jié)了呢胎署?

????某種意義上說的確是這樣,對一些簡單的需求來說窑滞,我們確實沒必要處理CALayer琼牧,因為蘋果已經(jīng)通過UIView的高級API間接地使得動畫變得很簡單。

????但是這種簡單會不可避免地帶來一些靈活上的缺陷哀卫。如果6)你略微想在底層做一些改變巨坊,或者使用一些蘋果沒有在UIView上實現(xiàn)的接口功能,這時除了介入Core Animation底層之外別無選擇此改。

????我們已經(jīng)證實了圖層不能像視圖那樣處理觸摸事件趾撵,那么他能做哪些視圖不能做的呢?這里有一些UIView沒有暴露出來的CALayer的功能:(CALayer高級用法)

陰影共啃,圓角占调,帶顏色的邊框

3D變換

非矩形范圍

透明遮罩

多級非線性動畫

4.使用圖層

?首先我們來創(chuàng)建一個簡單的項目勋拟,來操縱一些layer的屬性。打開Xcode妈候,使用Single View Application模板創(chuàng)建一個工程敢靡。

????在屏幕中央創(chuàng)建一個小視圖(大約200 X 200的尺寸),當然你可以手工編碼苦银,或者使用Interface Builder(隨你方便)啸胧。確保你的視圖控制器要添加一個視圖的屬性以便可以直接訪問它。我們把它稱作layerView幔虏。

運行項目纺念,應(yīng)該能在淺灰色屏幕背景中看見一個白色方塊(圖1.3),如果沒看見想括,可能需要調(diào)整一下背景window或者view的顏色


8動畫?

1> ios界面切換?

2>?iOS中各種動畫的類型&特點&使用場景

CAPropertyAnimation

是CAAnimation的子類陷谱,也是個抽象類,要想創(chuàng)建動畫對象瑟蜈,應(yīng)該使用它的兩個子類:CABasicAnimation和CAKeyframeAnimation

屬性解析:

keyPath:通過指定CALayer的一個屬性名稱為keyPath(NSString類型)烟逊,并且對CALayer的這個屬性的值進行修改,達到相應(yīng)的動畫效果铺根。比如宪躯,指定@”position”為keyPath,就修改CALayer的position屬性的值位迂,以達到平移的動畫效果


CABasicAnimation

CAPropertyAnimation的子類

屬性解析:

fromValue:keyPath相應(yīng)屬性的初始值

toValue:keyPath相應(yīng)屬性的結(jié)束值

隨著動畫的進行访雪,在長度為duration的持續(xù)時間內(nèi),keyPath相應(yīng)屬性的值從fromValue漸漸地變?yōu)閠oValue

如果fillMode=kCAFillModeForwards和removedOnComletion=NO掂林,那么在動畫執(zhí)行完畢后臣缀,圖層會保持顯示動畫執(zhí)行后的狀態(tài)。但在實質(zhì)上泻帮,圖層的屬性值還是動畫執(zhí)行前的初始值精置,并沒有真正被改變。比如刑顺,CALayer的position初始值為(0,0)氯窍,CABasicAnimation的fromValue為(10,10)饲常,toValue為(100,100)蹲堂,雖然動畫執(zhí)行完畢后圖層保持在(100,100)這個位置,實質(zhì)上圖層的position還是為(0,0)


CAKeyframeAnimation

CApropertyAnimation的子類贝淤,跟CABasicAnimation的區(qū)別是:CABasicAnimation只能從一個數(shù)值(fromValue)變到另一個數(shù)值(toValue)柒竞,而CAKeyframeAnimation會使用一個NSArray保存這些數(shù)值

屬性解析:

values:就是上述的NSArray對象。里面的元素稱為”關(guān)鍵幀”(keyframe)播聪。動畫對象會在指定的時間(duration)內(nèi)朽基,依次顯示values數(shù)組中的每一個關(guān)鍵幀

path:可以設(shè)置一個CGPathRef\CGMutablePathRef,讓層跟著路徑移動布隔。path只對CALayer的anchorPoint和position起作用。如果你設(shè)置了path稼虎,那么values將被忽略

keyTimes:可以為對應(yīng)的關(guān)鍵幀指定對應(yīng)的時間點,其取值范圍為0到1.0,keyTimes中的每一個時間值都對應(yīng)values中的每一幀.當keyTimes沒有設(shè)置的時候,各個關(guān)鍵幀的時間是平分的

CABasicAnimation可看做是最多只有2個關(guān)鍵幀的CAKeyframeAnimation


CAAnimationGroup

CAAnimation的子類衅檀,可以保存一組動畫對象,將CAAnimationGroup對象加入層后霎俩,組中所有動畫對象可以同時并發(fā)運行

屬性解析:

animations:用來保存一組動畫對象的NSArray

默認情況下哀军,一組動畫對象是同時運行的,也可以通過設(shè)置動畫對象的beginTime屬性來更改動畫的開始時間


CATransition

CAAnimation的子類打却,用于做轉(zhuǎn)場動畫杉适,能夠為層提供移出屏幕和移入屏幕的動畫效果。iOS比Mac OS X的轉(zhuǎn)場動畫效果少一點

UINavigationController就是通過CATransition實現(xiàn)了將控制器的視圖推入屏幕的動畫效果

屬性解析:

type:動畫過渡類型

subtype:動畫過渡方向

startProgress:動畫起點(在整體動畫的百分比)

endProgress:動畫終點(在整體動畫的百分比)


UIView動畫

UIKit直接將動畫集成到UIView類中柳击,當內(nèi)部的一些屬性發(fā)生改變時猿推,UIView將為這些改變提供動畫支持

執(zhí)行動畫所需要的工作由UIView類自動完成,但仍要在希望執(zhí)行動畫時通知視圖捌肴,為此需要將改變屬性的代碼放在[UIView beginAnimations:nil context:nil]和[UIView commitAnimations]之間


Block動畫


幀動畫


8?.網(wǎng)絡(luò)傳輸

1>DNS是如何工作的

DNS是domain name server的簡稱,每個網(wǎng)絡(luò)的計算機都有ip,但是不好記,所以用域名替代(如www.baidu.com),在Internet?上真實在辨識機器的還是IP蹬叭,所以當使用者輸入Domain Name?后,瀏覽器必須要先去一臺有Domain Name?和IP?對應(yīng)資料的主機去查詢這臺電腦的IP状知,而這臺被查詢的主機具垫,我們稱它為Domain Name Server,簡稱DNS试幽,例如:當你輸入www.pchome.com.tw時筝蚕,瀏覽器會將www.pchome.com.tw這個名字傳送到離他最近的DNS Server?去做辨識,如果查到铺坞,則會傳回這臺主機的IP起宽,進而跟它索取資料,但如果沒查到济榨,就會發(fā)生類似DNS NOT FOUND?的情形坯沪,所以一旦DNS Server當機,就像是路標完全被毀壞擒滑,沒有人知道該把資料送到那里

9?.AFN

1>實現(xiàn)原理

AFN的直接操作對象AFHTTPClient不同于ASI腐晾,是一個實現(xiàn)了NSCoding和NSCopying協(xié)議的NSObject子類。AFHTTPClient是一個封裝了一系列操作方法的“工具類”丐一,處理請求的操作類是一系列單獨的藻糖,基于NSOperation封裝的,AFURLConnectionOperation的子類库车。AFN的示例代碼中通過一個靜態(tài)方法巨柒,使用dispatch_once()的方式創(chuàng)建AFHTTPClient的共享實例,這也是官方建議的使用方法。在創(chuàng)建AFHTTPClient的初始化方法中洋满,創(chuàng)建了OperationQueue并設(shè)置一系列參數(shù)默認值晶乔。在getPath:parameters:success:failure方法中創(chuàng)建NSURLRequest,以NSURLRequest對象實例作為參數(shù)牺勾,創(chuàng)建一個NSOperation正罢,并加入在初始化發(fā)方中創(chuàng)建的NSOperationQueue。以上操作都是在主線程中完成的驻民。在NSOperation的start方法中腺怯,以此前創(chuàng)建的NSURLRequest對象為參數(shù)創(chuàng)建NSURLConnection并開啟連結(jié)。


2>?傳遞指針如何使一個方法返回多個返回值

傳參指針變量的地址,方法內(nèi)部通過*運算符使用該地址可以修改該地址保存的內(nèi)容(引用對象的地址),當外部再次使用該指針變量取出引用對象時,引用對象已經(jīng)在方法內(nèi)部發(fā)生了改變,指針變量指向其他數(shù)據(jù),相當于方法的返回值(經(jīng)方法處理后生成的外部可使用的結(jié)果數(shù)據(jù)).

9?AFNetworking&ASIHttpRequest&MKNetWorking

1川无、AFN的底層實現(xiàn)基于OC的NSURLConnection和NSURLSession

2呛占、ASI的底層實現(xiàn)基于純C語言的CFNetwork框架

3、因為NSURLConnection和NSURLSession是在CFNetwork之上的一層封裝懦趋,因此ASI的運行性能高于AFN

二晾虑、對服務(wù)器返回的數(shù)據(jù)處理

1、ASI沒有直接提供對服務(wù)器數(shù)據(jù)處理的方式仅叫,直接返回的是NSData/NSString

2帜篇、AFN提供了多種對服務(wù)器數(shù)據(jù)處理的方式

(1)JSON處理-直接返回NSDictionary或者NSArray

(2)XML處理-返回的是xml類型數(shù)據(jù),需對其進行解析

(3)其他類型數(shù)據(jù)處理

三诫咱、監(jiān)聽請求過程

1笙隙、AFN提供了success和failure兩個block來監(jiān)聽請求的過程(只能監(jiān)聽成功和失敗)

* success :?請求成功后調(diào)用

* failure :?請求失敗后調(diào)用

2坎缭、ASI提供了3套方案竟痰,每一套方案都能監(jiān)聽請求的完整過程

(監(jiān)聽請求開始、接收到響應(yīng)頭信息掏呼、接受到具體數(shù)據(jù)坏快、接受完畢、請求失斣饕摹)

* 成為代理莽鸿,遵守協(xié)議,實現(xiàn)協(xié)議中的代理方法

* 成為代理拾给,不遵守協(xié)議祥得,自定義代理方法

* 設(shè)置block

四、在文件下載和文件上傳的使用難易度

1蒋得、AFN

*不容易實現(xiàn)監(jiān)聽下載進度和上傳進度

*不容易實現(xiàn)斷點續(xù)傳

*一般只用來下載不大的文件

2级及、ASI(ipv6)

*非常容易實現(xiàn)下載和上傳

*非常容易監(jiān)聽下載進度和上傳進度

*非常容易實現(xiàn)斷點續(xù)傳

*下載大文件或小文件均可

3掺栅、實現(xiàn)下載上傳推薦使用ASI


五奏属、網(wǎng)絡(luò)監(jiān)控

1、AFN自己封裝了網(wǎng)絡(luò)監(jiān)控類皆串,易使用

2入偷、ASI使用的是Reachability追驴,因為使用CocoaPods下載ASI時,會同步下載Reachability疏之,但Reachability作為網(wǎng)絡(luò)監(jiān)控使用較為復(fù)雜(相對于AFN的網(wǎng)絡(luò)監(jiān)控類來說)

3殿雪、推薦使用AFN做網(wǎng)絡(luò)監(jiān)控-AFNetworkReachabilityManager

六、ASI提供的其他實用功能

1锋爪、控制信號旁邊的圈圈要不要在請求過程中轉(zhuǎn)

2丙曙、可以輕松地設(shè)置請求之間的依賴:每一個請求都是一個NSOperation對象

3、可以統(tǒng)一管理所有請求(還專門提供了一個叫做ASINetworkQueue來管理所有的請求對象)

* 暫停/恢復(fù)/取消所有的請求

* 監(jiān)聽整個隊列中所有請求的下載進度和上傳進度


MKNetworkKit?是一個使用十分方便其骄,功能又十分強大亏镰、完整的iOS網(wǎng)絡(luò)編程代碼庫。它只有兩個類, 它的目標是使用像AFNetworking這么簡單拯爽,而功能像ASIHTTPRequest(已經(jīng)停止維護)那么強大索抓。它除了擁有?AFNetworking和ASIHTTPRequest所有功能以外,還有一些新特色毯炮,包括:

?1逼肯、高度的輕量級,僅僅只有2個主類

?2桃煎、自主操作多個網(wǎng)絡(luò)請求

?3篮幢、更加準確的顯示網(wǎng)絡(luò)活動指標

?4、自動設(shè)置網(wǎng)絡(luò)速度为迈,實現(xiàn)自動的2G三椿、3G、wifi切換

?5葫辐、自動緩沖技術(shù)的完美應(yīng)用赋续,實現(xiàn)網(wǎng)絡(luò)操作記憶功能,當你掉線了又上線后另患,會繼續(xù)執(zhí)行未完成的網(wǎng)絡(luò)請求

?6纽乱、可以實現(xiàn)網(wǎng)絡(luò)請求的暫停功能

?7、準確無誤的成功執(zhí)行一次網(wǎng)絡(luò)請求昆箕,摒棄后臺的多次請求浪費

?8鸦列、支持圖片緩沖

?9、支持ARC機制

?10鹏倘、在整個app中可以只用一個隊列(queue)薯嗤,隊列的大小可以自動調(diào)整




10.性能優(yōu)化

1>?如何進行性能優(yōu)化

1.1>?內(nèi)存優(yōu)化的點?重用?懶加載

1.2>?渲染優(yōu)化?盡量使用不透明的圖?把views?設(shè)置為透明

1.3>?在ImageView設(shè)置前,盡量先調(diào)整好圖片大小?尤其放在uiscrolliview中自動縮放耗能

1.4>?避免使用過大的xib?和分鏡的區(qū)別?一次性加載

1.5>?不要阻塞主線程?除渲染,觸摸響應(yīng)等?盡量異步處理?如存儲,網(wǎng)絡(luò)?異步線程通知?

1.6>?緩存?網(wǎng)絡(luò)響應(yīng),圖片,計算結(jié)果(行高)?網(wǎng)絡(luò)響應(yīng)NSUrlconnection默認緩存request,設(shè)置策略?非網(wǎng)絡(luò)請求使用nscache nsdictionary

1.7>?避免反復(fù)處理數(shù)據(jù)?在服務(wù)器端和客戶端使用相同的數(shù)據(jù)結(jié)構(gòu)

1.8>?選擇正確的數(shù)據(jù)格式?json?速度快解析方便?xml?sax方式逐行解析解析大文件不占用內(nèi)存和損失性能

1.9>?優(yōu)化tableview?重用cell?緩存行高cell子視圖盡量少且不透明?

1.10>?選擇正確的數(shù)據(jù)存儲選項?plist nscoding NSUserDefaults sqlite coredata

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纤泵,隨后出現(xiàn)的幾起案子骆姐,更是在濱河造成了極大的恐慌镜粤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻褪,死亡現(xiàn)場離奇詭異肉渴,居然都是意外死亡,警方通過查閱死者的電腦和手機带射,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門同规,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窟社,你說我怎么就攤上這事券勺。” “怎么了灿里?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵关炼,是天一觀的道長。 經(jīng)常有香客問我匣吊,道長儒拂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任缀去,我火速辦了婚禮侣灶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缕碎。我一直安慰自己褥影,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布咏雌。 她就那樣靜靜地躺著凡怎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊抖。 梳的紋絲不亂的頭發(fā)上统倒,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音氛雪,去河邊找鬼房匆。 笑死,一個胖子當著我的面吹牛报亩,可吹牛的內(nèi)容都是我干的浴鸿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼弦追,長吁一口氣:“原來是場噩夢啊……” “哼岳链!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劲件,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掸哑,失蹤者是張志新(化名)和其女友劉穎约急,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苗分,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡厌蔽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俭嘁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺枕。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡服猪,死狀恐怖供填,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罢猪,我是刑警寧澤近她,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站膳帕,受9級特大地震影響粘捎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜危彩,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一攒磨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汤徽,春花似錦娩缰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至完疫,卻和暖如春泰鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壳鹤。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工盛龄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芳誓。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓余舶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兆沙。 傳聞我的和親對象是個殘疾皇子欧芽,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容