欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Objective-C的MKNetworkKit開發(fā)框架解析

 更新時間:2015年11月02日 09:52:15   作者:whj  
這篇文章主要介紹了Objective-C的MKNetworkKit開發(fā)框架解析,MKNetworkKit是一個用于iOS開發(fā)的輕量級框架,需要的朋友可以參考下

什么是MKNetworkKit?

MKNetworkKit是一個 O-C 編寫的網(wǎng)絡(luò)框架,支持塊,ARC 且用法簡單。

MKNetworkKit 集 ASIHTTPRequest 和 AFNetworking 兩個框架于一體。在集成二者的優(yōu)秀特性之外,還增加了一堆新的功能。尤其是,相比起其它框架,它能讓你更輕松地編寫代碼。它讓你徹底遠離那些惡心的網(wǎng)絡(luò)代碼。

特點

超輕量級框架

整個框架只有 2 個類和一些類別方法。因此,它的使用極其簡單。

在整個程序中只有一個全局隊列。

高度依賴互聯(lián)網(wǎng)連接的 app 應(yīng)該優(yōu)先考慮網(wǎng)絡(luò)線程的并發(fā)數(shù)。不幸的是,沒有任何網(wǎng)絡(luò)框架在這方面做得夠好。因此,一旦你在程序中沒有控制好網(wǎng)絡(luò)線程的并發(fā)數(shù),就極易導(dǎo)致出錯。

假設(shè)你要上傳一堆圖片到服務(wù)器上。絕大多數(shù)移動網(wǎng)絡(luò)(3G)不會允許你對同一個IP 地址的 HTTP 并發(fā)連接數(shù)超過 2 個。換句話說,在設(shè)備上,你不能從 3G 網(wǎng)絡(luò)中獲得 2 個以上的 HTTP 并發(fā)連接。對于 Edge 則更糟,大多數(shù)情況不能超過1 個。相比較家用寬帶網(wǎng)絡(luò)(Wifi),則這個限制要寬得多(6 個)。但是,你不可能總是使用 wifi,你必須也考慮到有限網(wǎng)絡(luò)(窄帶)的連通性。更多的時候,iDevice設(shè)備幾乎都能連接到 3G 網(wǎng)絡(luò),因此,你同時只能上傳 2 張圖片。但是,真正的問題不是緩慢的上傳速度,而是另一種情況。在你打開一個 view 試圖加載縮略圖(不同的view)時,上傳線程被運行到后臺。如果你沒有控制好上傳隊列中的線程數(shù),你的縮略圖會加載超時。這是不正常的。正確的方式是優(yōu)化縮略圖加載線程,或者讓線程等待直到上傳完成再加載縮略圖。這需要你在整個程序中只擁有一個queue 隊列。

MKNetworkKit 在它的每個實例中使用單例來保證這一點。并不是說MKNetworkKit 是單例的,而是說它的共享隊列是單例的。


常用框架比如:AFNetworking,ASIHttpRequest,SDWebImage,MKNetWorKit等。
現(xiàn)在MKNetWorkKi吸取了ASIHttpRequest與AFNetWorking的優(yōu)點,并加入了自己特有的功能。

下載:

gitHub地址:https://github.com/MugunthKumar/MKNetworkKit.git

官方使用說明:http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/

github下載了該項目后,如果想運行其demo,一定要打開MKNetworkKit.xcworkspace該文件,若單獨打開,則編譯時會提示缺少libMKNetworkKit-iOS.a文件?。?!

安裝:

克隆下來之后把其中的 MKNetworkKit文件夾拖入項目,然后引入3個framework:

201511295059216.png (564×197)

注意:由于MKNetworkKit支持ARC,我們在項目中要開啟ARC,不然會報錯

201511295116886.png (990×79)

開啟ARC自動內(nèi)存控制機制:(開啟ARC之后項目中所有的dealloc 、release 、autorelease都得注釋掉)

201511295138361.png (1024×339)

使用方法:

  在需要使用的地方導(dǎo)入:#import"MKNetworkKit.h"
正確顯示網(wǎng)絡(luò)狀態(tài)指示

許多第 3 方框架都通過一個“網(wǎng)絡(luò)連接數(shù)增加/減少”的方法回調(diào)來顯示網(wǎng)絡(luò)狀態(tài),MKNetworkKit則由于使用了單例的共享隊列,能自動顯示網(wǎng)絡(luò)狀態(tài)。在共享隊列中有一個線程通過 KVO 方式會隨時觀察 operationCount 屬性。因此對于開發(fā)者,一般情況下根本不需要操心網(wǎng)絡(luò)狀態(tài)的顯示。

復(fù)制代碼 代碼如下:

if (object == _sharedNetworkQueue && [keyPath isEqualToString:@"operationCount"]) {

     [UIApplication sharedApplication].networkActivityIndicatorVisible =        ([_sharedNetworkQueue.operations count] < 0);

     }


自動改變隊列大小

如前所述,絕大部分移動網(wǎng)絡(luò)不允許 2 個以上的并發(fā)連接,因此你的隊列大小在3G 網(wǎng)絡(luò)下應(yīng)當(dāng)設(shè)置為 2。 MKNetworkKit 會自動為你處理好這個。當(dāng)網(wǎng)絡(luò)出于3G/EDGE/GPRS 時,它會將并發(fā)數(shù)調(diào)整到 2。當(dāng)網(wǎng)絡(luò)處于 Wifi 網(wǎng)絡(luò)時,則自動調(diào)整到 6。當(dāng)你通過 3G 網(wǎng)絡(luò)中從遠程服務(wù)器加載縮略圖時,這種調(diào)整能帶來極大的好處。

自動緩存

MKNetworkKit 能自動緩存你所有的 GET 請求。當(dāng)你再次發(fā)起同樣的請求時,MKNetworkKit 隨即就能調(diào)用 response緩存(如果可用的話)傳遞給 handler 進行處理。當(dāng)然,它同時也向服務(wù)器發(fā)出請求。一旦獲得服務(wù)器數(shù)據(jù),handler 被再次要求處理新獲取的數(shù)據(jù)。也就是說,你不用手動緩存。你只需要使用:

復(fù)制代碼 代碼如下:

 [[MKNetworkEngine sharedEngine] useCache];

當(dāng)然,你可以覆蓋這個方法(子類化),定制你的緩存路徑和緩存占用的內(nèi)存開銷。

凍結(jié)網(wǎng)絡(luò)操作

MKNetworkKit 能夠“凍結(jié)”網(wǎng)絡(luò)操作。在一個網(wǎng)絡(luò)操作被“凍結(jié)”的情況下,一旦網(wǎng)絡(luò)連斷開,它們將自動序列化并在設(shè)備再次連線時自動被提交一次。類似 twitter 客戶端的“drafts”。

當(dāng)你提交一篇 tweet 時,如果網(wǎng)絡(luò)被標記為“可凍結(jié)”,MKNetworkKit 會自動執(zhí)行凍結(jié)并儲存這些請求。因此會在將來推遲發(fā)送這篇 tweet。整個過程不需要你寫一行代碼。這個特性你可以用于其他操作,諸如收藏一篇 tweet 或者從 Goolge reader 客戶端共享一個帖子,加一個鏈接到Instapaper 中,等等。

類似的請求只執(zhí)行一個操作:

當(dāng)你加載縮略圖(針對 twitter stream)時,你最終得為每個實際的圖片創(chuàng)建一個新的請求。實際上你所進行的多個請求都是同一個URL。MKNetworkKit 對于隊列中的每個 GET 請求都只會執(zhí)行一次。它還不能到緩存 POST 請求。

圖片緩存

MKNetworkKit 內(nèi)置了縮略圖緩存。只要覆蓋幾個方法,就可以設(shè)置內(nèi)存中最大能緩存的圖片數(shù)量,以及緩存要保存到目錄。當(dāng)然,你也可以不覆蓋這些方法。

性能

即速度。MKNetworkKit 緩存是內(nèi)置的,就如 NSCache,當(dāng)發(fā)現(xiàn)有內(nèi)存警告,緩存到內(nèi)存中的數(shù)據(jù)將被寫入緩存目錄。

完全支持 ARC

一般你只會在新項目中使用新的網(wǎng)絡(luò)框架。MKNetworkKit并不意味著要放棄已有的框架(當(dāng)然你也可以放棄,這會是個乏味的工作)。對于新的項目,你總是想使用 ARC。當(dāng)你看到本文的時候,很可能 MKNetworkKit  會是僅有的完全支持 ARC 的網(wǎng)絡(luò)框架。ARC 通常比非 ARC 代碼更快。

用法

Ok,我就不“自賣自夸”了。讓我們立即了解如果使用這個框架。

添加MKNetworkKit

將 MKNetworkKit 目錄拖到項目中

添加下列框架: CFNetwork.Framework, SystemConfiguration.framework, Security.framework and ImageIO.Framework.

將 MKNetworkKit.h 頭文件包含到 PCH 文件中

對于 iOS,刪除 NSAlert+MKNetworkKitAdditions.h

對于 Mac,刪除 UIAlertView+MKNetworkKitAdditions.h

總共只需要 5 個核心文件,真是一個強大的網(wǎng)絡(luò)開發(fā)包

MKNetworkKit 的類

MKNetworkOperation

MKNetworkEngine

一些工具類 (Apple 的 Reachability) 以及類別

我喜歡簡單。蘋果已經(jīng)寫了最基本最核心的網(wǎng)絡(luò)代碼。第 3 方框架需要的是提供一個優(yōu)雅的網(wǎng)絡(luò)隊列最多再加上緩存。我認為第3 方框架不應(yīng)該超過 10 個類(無論它是網(wǎng)絡(luò)的還是 UIKit 還是別的什么)。超過這個數(shù)就太臃腫了。Three20 就是一個例子。現(xiàn)在 ShareKit 又是這樣。盡管它們是優(yōu)秀的,但仍然是龐大和臃腫的。ASIHttpRequest or AFNetworking 比 RESTKit 更輕,JSONKit比TouchJSON (或者任何 TouchCode 庫)更輕。這只是我自己的看法,但當(dāng)一個第三方庫的代碼超過程序源代碼1/3,我就不會使用它。

框架臃腫帶來的問題是很難理解它的內(nèi)部工作機制,以及很難根據(jù)自己的需求定制它(當(dāng)你需要時)。我曾經(jīng)寫過的一些框架(例如MKStoreKit ,用于應(yīng)用程序內(nèi)購的 )總是易于使用,我認為MKNetworkKit 也應(yīng)該是這樣。對于 MKNetworkKit ,你所需要了解的就是暴露在兩個類MKNetworkOperation 和 MKNetworkEngine 中的方法。MKNetworkOperation 就好比ASIHttpRequest類。它是一個NSOperation 子類,封裝了你的 request 和 response 類。對于每個網(wǎng)絡(luò)操作,你需要創(chuàng)建一個MKNetworkOperation 。

MKNetworkEngine 是一個偽單例類,管理程序中的網(wǎng)絡(luò)隊列。它是偽單例的,也就是說,對于簡單請求,你可以直接用MKNetworkEngine 中的方法。要進行深度的定制,你應(yīng)該進行子類化。每個 MKNetworkEngine 子類有它自己的Reachability 對象,用于通知它來自服務(wù)器的reachability 通知。對于不同的 REST 服務(wù)器,你可以考慮創(chuàng)建單獨的 MKNetworkEngine子類。

它是偽單例,它的子類的每個請求都共用唯一的一個隊列。你可以在應(yīng)用程序委托中retain 這個 MKNetworkEngine ,就像CoreData 的 managedObjectContext 類一樣。在使用MKNetworkKit 時,創(chuàng)建一個 MKNetworkEngine 子類將你的網(wǎng)絡(luò)請求進行邏輯上的分組。例如,將所有關(guān)于 Yahoo 的方法放在一個類,所有 Facebook 有關(guān)的方法放進另一個類。來看 3 個實際使用的例子。

例1:

創(chuàng)建一個  “YahooEngine” 從 Yahoo 財經(jīng)服務(wù)器抓取貨幣匯率。

步驟 1:創(chuàng)建YahooEngine 類繼承于MKNetworkEngine。MKNetworkEngine 使用主機名和指定的頭(如果有的話)進行初始化。頭信息可以是nil。如果你是在自己的 REST 服務(wù)器上,你可以考慮加一個客戶端 app 的版本或者其他信息(比如客戶端的標識)。

復(fù)制代碼 代碼如下:

NSMutableDictionary *headerFields = [NSMutableDictionary dictionary];     [headerFields setValue:@"iOS"forKey:@"x-client-identifier"];

self.engine = [[YahooEngine alloc] initWithHostName:@"download.finance.yahoo.com"                        customHeaderFields:headerFields];

 


注意,yahoo 并不識別你在頭中發(fā)送x-client-identifier 給它,這個示例僅僅是演示這個特性而

由于使用了 ARC 代碼,作為開發(fā)者你需要擁有(強引用)Engine對象。

一旦你創(chuàng)建了一個 MKNetworkEngine子類, Reachability 即自動實現(xiàn)。當(dāng)你的服務(wù)器由于某些情況掛了,主機名不可訪問,你的請求會自動被凍結(jié)。關(guān)于“凍結(jié)”,請參考后面的“凍結(jié)操作”小節(jié)。

步驟 2:設(shè)計Engine 類 (關(guān)注分離)

現(xiàn)在,開始編寫 Yahoo Engine 中的方法,以抓取匯率。這些方法將在ViewController 中被調(diào)用。良好的設(shè)計體驗是確保不要將 engine 類中的 URL/HTTPHeaders 暴露給調(diào)用者。你的視圖不應(yīng)該知道URL 或者相關(guān)的參數(shù)。也就是,只需要向 engine 方法傳遞貨幣種類和貨幣單位就可以了。方法的返回值可能是 double,即匯率,以及獲取匯率的時間。由于是異步操作,你應(yīng)當(dāng)在塊中返回這些值。例如:

復(fù)制代碼 代碼如下:

-(MKNetworkOperation*) currencyRateFor:(NSString*) sourceCurrency                  

            inCurrency:(NSString*) targetCurrency   

        onCompletion:(CurrencyResponseBlock) completion

        onError:(ErrorBlock) error;

在父類 MKNetworkEngine 中,定義了3 個塊類型:

typedef void (^ProgressBlock)(double progress);

typedef void (^ResponseBlock)(MKNetworkOperation* operation);

typedef void (^ErrorBlock)(NSError* error);


在 YahooEngine中,我們使用了一個新的塊類型:CurrencyResponseBlock,用以返回匯率。其定義如下:

typedef void (^CurrencyResponseBlock)(double rate);

在其他正式的 app 中,你應(yīng)該定義自己的塊類似于CurrencyResponseBlock ,用以向 ViewController 返回數(shù)據(jù)。

步驟 3:處理數(shù)據(jù)
處理數(shù)據(jù),包括將從服務(wù)器抓來的數(shù)據(jù)(例如 JSON/XML/plists)進行數(shù)據(jù)類型轉(zhuǎn)換。這應(yīng)當(dāng)在 Engine 中完成。注意,不要在控制器中完成。你的 Engine 應(yīng)當(dāng)將數(shù)據(jù)以適當(dāng)?shù)哪P蛯ο蠡蚰P蛯ο蟮臄?shù)組返回。在engine 中轉(zhuǎn)換 JSON/XML 為模型——注意,適當(dāng)保持關(guān)注分離,view controller 不應(yīng)當(dāng)知道任何用于訪問 JSON 節(jié)點的 key。這種思想主導(dǎo)了engine 的設(shè)計。許多網(wǎng)絡(luò)框架并不強制要求你服從關(guān)注分離,我們這樣做,是因為我們?yōu)槟憧紤]到了。

步驟 4:實現(xiàn)方法
現(xiàn)在,我們來討論方法實現(xiàn)細節(jié)。要從 Yahoo 獲得匯率信息,最簡單的是發(fā)起一個 GET 請求。下列宏用一對指定的貨幣格式化 URL 字串:

We will now discuss the implementationdetails of the method that calculates your currency exchange.

Getting currency information from Yahoo,is as simple as making a GET request.
I wrote a macro to format this URL for a given currency pair.

#define YAHOO_URL(__C1__, __C2__) [NSString stringWithFormat:@"d/quotes.csv?e=.csv&amp;f=sl1d1t1&amp;s=%@%@=X", __C1__, __C2__]

按如下順序編寫 engine類方法:

根據(jù)參數(shù)準備 URL

創(chuàng)建一個 MKNetworkOperation 對象

設(shè)置方法參數(shù)

設(shè)置 operation 的 completion 塊和 error 塊(在 completation 塊中處理 response 并轉(zhuǎn)換為模型)

可選地,添加一個 progress 塊(或者在 view controller 中做這個)

如果 operation 是下載,設(shè)置下載流(通常是文件)。這步也是可選的

當(dāng) operation 完成,處理結(jié)果并調(diào)用方法塊,并將數(shù)據(jù)返回給調(diào)用者。

示例代碼如下:

復(fù)制代碼 代碼如下:

MKNetworkOperation *op = [selfoperationWithPath:YAHOO_URL(sourceCurrency, targetCurrency)

params:nil

httpMethod:@"GET"];

 

    [op onCompletion:^(MKNetworkOperation*completedOperation)

     {

        DLog(@"%@", [completedOperation responseString]);

 

 //do your processing here

         completionBlock(5.0f);

 

     }onError:^(NSError* error) {

 

         errorBlock(error);

     }];

 

    [self enqueueOperation:op];

 

    return op;


上述代碼格式化 URL 并創(chuàng)建了 MKNetworkOperation。設(shè)置完 completion 和 error 塊之后,將 operation 加入到隊列(通過父類的 enqueueOperation 方法),然后返回一個 operation 的引用。因此,如果你在 viewDidAppear 中調(diào)用這個方法,則在 viewWillDisappear 方法中取消operation。取消 operation 將釋放 operation 以便執(zhí)行 queue 中用于其他view 的 operation(牢記,在移動網(wǎng)絡(luò)中只有2 個 operation 能被同時進行,當(dāng) operation 不再需要時取消它們能提升 app 的性能和速度)。

在 viewcontroller 中也可以添加一個 progress 塊用以刷新UI。例如:

復(fù)制代碼 代碼如下:

[self.uploadOperation onUploadProgressChanged:^(double progress) {  

      DLog(@"%.2f", progress*100.0);             

      self.uploadProgessBar.progress = progress;     }];


MKNetworkEngine 也有一個只用 URL 創(chuàng)建 operation 的有用方法。因此第1行代碼也可以寫成:

MKNetworkOperation *op = [self operationWithPath:YAHOO_URL(sourceCurrency, targetCurrency)];

注意,請求的 URL將自動添加上主機名(在 engine 實例化時指定的)。

 

像這樣的實用方法 MKNetworkEngine還有許多,你可以查看頭文件。

例2:

上傳圖片到服務(wù)器 (例如 TwitPic)。
現(xiàn)在讓我們看一個上傳圖片到服務(wù)器的例子。要上傳圖片,顯然要 operation 能編碼 multi-part 表單數(shù)據(jù)。 MKNetworkKit 使用類似 ASIHttpRequest 的方式。
你可以非常簡單地通過MKNetworkOperation 的 addFile:forKey:方法將一個文件作為請求中的 multi-part 表單數(shù)據(jù)提交。

MKNetworkOperation 也有一個方法,可以將圖片以 NSData 的方式提交。即 addData:forKey: 方法,它可以將圖片以NSData 的方法上傳到服務(wù)器。 (例如直接從相機中捕獲的圖片).

例3:

下載文件到本地目錄 (緩存)
使用MKNetworkKit 從服務(wù)器下載文件并保存到 iPhone 的本地目錄非常簡單。

只需要設(shè)置 MKNetworkOperation的 outputStream 。

[operation setDownloadStream:[NSOutputStream         outputStreamToFileAtPath:@"/Users/mugunth/Desktop/DownloadedFile.pdf"                         append:YES]];

你可以設(shè)置多個 outputStream 到一個 operation,將同一文件保存到幾個地方(例如其中一個是你的緩存目錄,另一個用做你的工作目錄)。

例4:

緩存圖片的縮略圖

對于下載圖片,你可能需要提供一個絕對 URL 地址而不是一個路徑。
MKNetworkEngine 的operationWithURLString:params:httpMethod: 方法根據(jù)絕對 URL地址來創(chuàng)建網(wǎng)絡(luò)線程。

MKNetworkEngine 相當(dāng)聰明。它會將同一個 URL 的多次 GET 請求合并成一個,當(dāng) operation 完成時它會通知所有的塊。這顯著提升了抓取圖片 URL 以渲染縮略圖的速度.

子類化 MKNetworkEngine然后覆蓋圖片的緩存目錄及緩存的大小。如果你不想定制這二者,你可以直接調(diào)用 MKNetworkEngine中的方法來下載圖片。這是我極力推薦的。

緩存operation

MKNetworkKit 默認會緩存所有請求。你所需要的僅僅是在你自己的 engine 中打開它。當(dāng)執(zhí)行一個 GET 請求時,如果上次的 response 已緩存,相應(yīng)的 completion 塊將用緩存的response 進行調(diào)用(瞬間)。要想知道 response 是否緩存,可以調(diào)用 isCachedResponse 方法,如下所示:

復(fù)制代碼 代碼如下:

[op onCompletion:^(MKNetworkOperation *completedOperation) {

          if([completedOperation isCachedResponse]) {

              DLog(@"Data from cache");

          }else {

              DLog(@"Data from server");

          }

            DLog(@"%@", [completedOperation responseString]);

      }

onError:^(NSError* error) {

            errorBlock(error);

}];


凍結(jié)operation

MKNetworkKit 的一個最有趣的特性是它內(nèi)置的凍結(jié) operation 特性。你只需要設(shè)置 operation 的 freeesable 屬性就可以。幾乎什么也不用做!

[op setFreezable:YES];

凍結(jié)是指 operation 在網(wǎng)絡(luò)被斷開時自動序列化并在網(wǎng)絡(luò)恢復(fù)后自動執(zhí)行。例如當(dāng)你離線時也能夠進行收藏tweet 的操作,然后在你再次上線時 operation 自動恢復(fù)執(zhí)行。

在應(yīng)用程序進入后臺時,凍結(jié)的 operation 也會被持久化到磁盤。然后在應(yīng)用程序回到前臺后自動恢復(fù)執(zhí)行。

MKNetworkOperation 中的有用方法

如下所示,MKNetworkOperation 公開了一些有用的方法,你可從中獲取各種格式的 response 數(shù)據(jù):

復(fù)制代碼 代碼如下:

responseData

responseString

responseJSON (Only on iOS 5)

responseImage

responseXML

error


當(dāng) operation 執(zhí)行完時,這些方法被用于獲取響應(yīng)數(shù)據(jù)。如果格式不正確,方法會返回nil。例如,響應(yīng)的數(shù)據(jù)明明是一個 HTML 格式,你用 responseImage 方法只會得到 nil。只有 responseData 能保證無論什么格式都返回正確,而其他方法你必須確保和相應(yīng)的repsone 類型匹配。

有用的宏

DLog 和 ALog 宏被無恥地從 Stackoverflow 剽竊來了,我找不到源作者。如果是你寫的,請告訴我。

關(guān)于GCD 的一點說明

因為網(wǎng)絡(luò)線程有可能會能被停止或優(yōu)先處理,我果斷放棄了 GCD——GCD 的效率是比NSOperation 高,但它做不到這一點。我建議在你的網(wǎng)絡(luò)線程中也不要使用基于 GCD 的隊列。

相關(guān)文章

  • iOS 頁面滑動與標題切換顏色漸變的聯(lián)動效果實例

    iOS 頁面滑動與標題切換顏色漸變的聯(lián)動效果實例

    本篇文章主要介紹了iOS 頁面滑動與標題切換顏色漸變的聯(lián)動效果實例,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • 詳解iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法

    詳解iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法

    這篇文章主要介紹了iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法,AVAudioPlayer僅能播放本地文件而不能添加網(wǎng)絡(luò)源,實例代碼為Objective-C,需要的朋友可以參考下
    2016-03-03
  • ios實現(xiàn)搜索關(guān)鍵字高亮效果

    ios實現(xiàn)搜索關(guān)鍵字高亮效果

    這篇文章主要介紹了ios實現(xiàn)搜索關(guān)鍵字高亮效果的方法以及實例代碼分享,有需要的朋友參考學(xué)習(xí)下。
    2018-02-02
  • IOS UIView的生命周期的實例詳解

    IOS UIView的生命周期的實例詳解

    這篇文章主要介紹了IOS UIView的生命周期的實例詳解的相關(guān)資料,希望通過本文大家能掌握理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • IOS接入facebook詳解

    IOS接入facebook詳解

    這篇文章主要介紹了IOS接入facebook詳解,對接入第三方SDK感興趣的同學(xué),可以參考下
    2021-04-04
  • iOS如何使用自己添加的字體庫

    iOS如何使用自己添加的字體庫

    這篇文章主要為大家介紹了iOS如何使用自己添加的字體庫詳細過程,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Mac Charles抓包工具詳細介紹

    Mac Charles抓包工具詳細介紹

    這篇文章主要介紹了 Mac Charles抓包工具詳細介紹的相關(guān)資料,這簡單介紹下如何安裝,使用等基礎(chǔ)知識,需要的朋友可以參考下
    2016-12-12
  • iOS底層探索之自動釋放池原理解析

    iOS底層探索之自動釋放池原理解析

    這篇文章主要介紹了iOS底層探索之自動釋放池,自動釋放池的壓棧和出棧,通過結(jié)構(gòu)體的構(gòu)造函數(shù)和析構(gòu)函數(shù)觸發(fā),自動釋放池的本質(zhì)是__AtAutoreleasePool結(jié)構(gòu)體,包含構(gòu)造函數(shù)和析構(gòu)函數(shù),本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-06-06
  • iOS實現(xiàn)帶有縮放效果的自動輪播圖

    iOS實現(xiàn)帶有縮放效果的自動輪播圖

    這篇文章主要為大家詳細介紹了iOS帶有縮放效果的自動輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS二維碼的生成和掃描

    iOS二維碼的生成和掃描

    這篇文章主要為大家詳細介紹了iOS二維碼生成和掃描的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論