你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS各種小理論知識

iOS各種小理論知識

編輯:IOS開發綜合

Objective-C 部分

1. 你如何理解 OC 的內存管理

OC 內存管理是基於引用計數。誰想使用某個對象 B,就要把對象 B 的計數器+1,如果不使用這個對象了,那麼就把對象 B 計數器-1,如果 B 對象計數器減到 0,那麼 B 對象自動會調用自己的 dealloc 函數,也就是這個對象被銷毀。

一句話就是 誰擁有對象,誰負責釋放該對象,誰 alloc 誰應該 release 或者 autorelease

系統有一個自動釋放池,對於一些對象我們可以放在自動釋放池中。如果自動釋放池本身銷毀,那麼裡面的內容會被全部調用 release.assign, retain, copy, autorelease, release, dealloc 的不同assign 就是基本的賦值,就是 C 的基本的賦值retain 就是讓對象引用計數+1,表示擁有了這個對象copy 把對象復制一份。copy 是深拷貝,淺拷貝auorelease 把對象放在自動釋放池裡面

release 表示對象計數器-1 如果減到 0 那麼對象自動 dealloc

self.name= “yang”和 name= “yang”的關系

self.name 表示調用 setter 調用一個函數

name=”year”表示給字段 field 賦值

什麼是深拷貝和淺拷貝 copy

淺拷貝只是拷貝對象本身,不遞歸的拷貝裡面的子對象深拷貝是把對象以及對象的對象遞歸拷貝。注意強調 mutableCopy 不是深拷貝如果要對自己對象 BookModel 實現拷貝 那麼必須實現 NSCopying 協議實現裡面的 - (id) copyWithZone:(NSZone *)zone;

copy 和 mutableCopy 是什麼

mutableCopy 可變拷貝 NSString -- mutableCopy- NSMutableStringNSArray -- mutableCopy- NSMutableArray;

NSMutableString - copy---NSString

#import 和#include 區別

#import 對於包 多個相同文件只是包 一次 防止了重復包

#include 需要加上#ifndef __QF_Header__#define __QF_Header__

#endif

7. OC 有沒有 GC/Gabbage Collector 垃圾回收

iPhone/OC 沒有 GC 當時 Mac 本地的 OC 是有 GC 的8. KVC 是什麼,有什麼好處

KVC 就是 key value coding. 主要用來大量的對象賦值上。比如網絡下載 json 數據進行解析,然後要給數據模型賦值。

bookModel.name = [dict objectForKey:@”name”];

bookModel.author = [dict objectForKey:@”author”];如果要用 kvc 那麼就可以簡寫成

NSArray *arr = [NSArray arrayWithObjects:@”name”, @”author”, nil];for(NSString *field in arr) {

NSString *v = [dict objectForKey:field];

bookModel setValue:v forKey:field];}

kvc 有 2 個方法 setValue:forKey:和 valueForKey:方法分別對應 setter 和 getter 方法KVO 主要用在屬性的監 上。KVO 比如用在播放視頻的時候我想知道當前的播放進度

協議和代理的關系和區別協議就是規范接口(讓每個對象都有相同的函數),主要是用來在多個對方中數據傳輸的統一接口。類似於 java 中得接口。OC 協議的所有方法不一定要全部實現。@optional,當時java 中得接口全部需要實現。

代理是一種設計模式。在 iOS 中主要是用來做反向傳值。

OC 裡面的 NSArray, NSDictionary 如何實現的NSArray 使用鏈表實現, NSDictionary 使用 hash 表

什麼是單例?單例就是一個全局對象,就是只有一個對象,目的是為了數據共享。單例在多線程重要注意什麼? 需要加鎖 OC ,避免多個線程同時創建單例

+(id) sharedInstance {static id _s;@synchronized(self) {

if (_s == nil) _s = [[[self class] alloc] init];}

return _s;}

界面之間傳值有哪些方法?

正向傳就是屬性,方法

反向就是代理。用單例,用 blocks,用數據庫,通知中心

NSNotification 原理是啥?原理就是接收端把接受函數注冊到一個數組中,發送端發送數據就直接調用之前存得函

NSNotification 是同步的。不是異步的。

1. NSNotification是同步還是異步的

是同步的. 如果需要異步 必須使用 NSNotificationQueue 實現

A notification center delivers notifications to observers synchronously. In other words, thepostNotification: methods do not return until all observers have received and processed thenotification. To send notifications asynchronously use NSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the

notification was posted, which may not be the same thread in which an observer registereditself.

Hope it helps you.

類別 Category 和繼承區別類別是用在給一個類擴展方法,不用保存變量,因為類別不能保存變量集成擴展方法和變量。比較重一些。類別 Category 相對輕量一些。當時不能完全替代集成。

你如何理解 ScrollView 復用, TableView 才有下拉刷新原理是?

EGO

iOS5, iOS6, iOS7 適配if (isIOS7) {

// 讓iOS7 導航控制器不透明self.navigationController.navigationBar.translucent = NO;self.edgesForExtendedLayout = UIRectEdgeNone;

// 可以認為上 2 讓它恢復成iOS6的經典模式

}

對於圖 需要 如實現 個宏來取得正確的版本的圖 iphone5 度適配,要動態的獲取 度

網絡部分

2. 你如何理解線程

iOS 線程是為了界面流暢,防止界面假死.比如解析一個大文件,比如一個地區詳情文件,解析時間比如是 10s,那麼不用線程的話,界面就會假死/卡 10s,用戶體驗差,那麼解決方法就是很快把界面暫時,啟動線程去後台解析。

再比如,做圖片濾鏡。圖像操作會耗費很多時間,比如 5s,那麼界面會假死 5s,那麼用戶體驗差,解決方法是啟動線程在後台使用濾鏡算法處理圖像,一旦處理完就通知主線程刷新界面.在比如:網絡下載數據,由於網絡狀態好壞時間會不確定,那麼我們需要使用線程來處理這種不確定的關系,一定數據接收完成,那麼就可以通知主線程處理。再比如讀取數據全國電話號碼數據庫,時間很長,那麼就需要通過線程來做特別強調的是,線程不是快。是為了給用戶一個快得假象

3. 你如何理解線程池線程池就是一堆項目的集合,就是一個線程隊列來管理這些線程對象。如果需要處理一

些任務,可以從線程池中直接取線程,而不是臨時創建線程。比如 NSOperationQueue 就是一個線程池,管理 NSOperation 線程對象

線程鎖 NSLock

線程鎖是多個線程要訪問同一個資源引入的一種機制。比如 2 個線程同時寫數據文件,那麼需要用鎖 NSLock 來保證同一個時刻只能有一個線程寫。寫結束後另外一個線程才能接著寫。比如創建單例的時候,為了保證哪怕多個線程同時創建單例,也只能創建一個單例對象。

4. 你如何理解圖片下載

圖片下載一般使用 Lazy 懶加載和圖片緩存的模式。懶加載就是需要的時候才去臨時記載。

主要是節省內存空間和用戶流量。緩存就是把 url 地址做成 md5 存在沙盒中以便下次直接使用。

3. ASI 的原理是啥??

ASI 使用 Apple 底層的 CFNetwork 框架實現的。而不是用 BSD Socket 實現的。他是一個基於 NSOperation 的線程處理網絡框架。CFNetwork 是基於 InputStream/Outstream 流的方式管理數據。它內部使用了多線程異步模式進行數據的通訊。比如數據的上傳進度,下載進度,緩存的管理機制。大文件下載,大文件上傳,安全機制等。

4. SDWebImage 原理是什麼?

SDWebImage 是一個基於 NSOperation/NSInvokeOperation 的一個多線程圖片緩存框架framework,

原理是每次通過[uiimageview setImageWithUrl:]就啟動一個異步線程,負責下載網絡圖片,一旦下載完成就把網址使用 md5 做一個校驗 checksum,然後存在一個沙盒 sandbox 管理目錄中,以便下次可以直接從 sandbox 中讀取,而不需要從網絡上下載,目的是為了節省用戶流量,加快圖片訪問速度。

5. HTTP 原理是?HTTP是基於TCP/IP的一個網絡連接協議,它是客戶端和服務器通訊的常用方式。 他

是使用請求,響應模型,客戶端請求,服務端響應的方式。HTTP 協議有請求頭,請求體,響應頭,響應體。XML/Json 是一般作為響應的數據格式傳輸。GET/POST 是和請求的 2 中常見方式。還有 2 中 PUT, DELETE

TCP/IP 的原理是?

TCP/IP 是網絡底層的二進制協議。它是網絡傳輸的標准協議。 TCP 是穩定,可靠的點對

點傳輸,UDP 是不可靠的,高速的網絡傳輸協議。在手機客戶單中,一般用在聊天類IM(Instance Message),或者視頻流,語音等大數據中。TCP 可以和服務器保持長連接。一般使用Socket來進行TCP/IP開發程序,常見的套接字是AsyncSocket, BSD Socket。或者CFNetwork 都可以

在 HTTP 協議頭上加上 Range 字段就可以使用斷點下載,每次取得文件大小,然後設置

Range 字段,然後下載的數據追加到文件的最後。這種方式就是斷點下載。

Socket 原理是什麼?

AsyncSocket 是 iOS 中一個 TCP/IP 通訊的開源的套接字框架。比 BSD Socket 好用一些。

AsyncSocket 使用了 CFNetwork 中異步回調模型。所有的收發數據都是使用代理來通知。內部基於 CFNetwork 裡面的 Stream 流的模式。他支持 TCP/UDP,支持 UDP 廣播,組播,比如 XMPP 裡面就用了 AsyncSocket 來進行底層通訊。

Cookie 原理

Cookie 類似於 Token,主要是為了讓服務端能夠識別當前用戶。在手機上一般使用 token模式。在浏覽器上比較喜歡 cookie, iOS NSUrlConnection 和 ASI 都支持 Cookie, Cookie 就是一塊小的數據存儲空間。

MVC

MVC 是 Model, View, Controller 的簡稱,主要是為了解決 Model 和 View 界面之間耦合度的問題(保證低耦合)。保證數據模型和刷新界面相對獨立。Controller 就是在中間把 Model和 View 耦合在一起。因為大型軟件要求 Model 盡量和界面進行獨立一些。比如很多界面有列表模式,地圖模式。界面有 2 分,當時數據模型就一份。

比如:iOS 常見的開發大多基於 MVC 模型,比如 Controller 去啟動網絡,數據處理,然後解析數據,然後建立數據模型,然後把數據模型關聯到 TableViewCell 上。這種就是典型的 MVC

6. weibo/OAuth 分享原理是什麼

Weibo 使用了 OAuth 網絡協議。目前使用 OAuth2.0 協議。他是基於 HTTP 的一個網絡認

證協議,通過 AppKey 等調用 weibo 的頁面,然後用戶輸入賬號,weibo 密碼服務器返回成功後的 token。

7. 微信,支付寶,銀聯原理是什麼微信,支付寶,銀聯都是在真機上使用。我們在程序中調用微信,支付寶,銀聯等程序,

然後給他們傳入相應地參數接口,這個就是 2 個程序之間項目的傳輸數據。是通過 URL 進行識別的。具體他們協議都沒有公開,所以我們需要他們自己的 SDK 進行開發。

8. XMPP 原理?

XMPP 是基於 Socket 套接字的一個專門聊天 IM 的協議。他支持注冊,登陸,以及單聊,群組聊天功能。對圖片,語音,文件支持不好,一般使用 HTTP 來進行轉發一下。或者做一個 base64 編碼。XMPP 是一個即時聊天框架,支持和 googletalk msn 早期的 qq 進行通訊。他內部支持重連機制(斷線後自動重連)。心跳機制。內部使用 CoreData 進行數據的管理。

CoreData 是什麼?

CoreData 是 Apple 自己的一個數據庫管理框架,它好處是可以避免使用 sql 語句,是一個圖形化的操作框架,當時從開發者角度來說,不然 FMDB/sql 直接使用 sql 語句更方便. 因

HTTP 斷點下載原理

為 FMDB 可以支持支持標准的 sql 語句。支持事務 Transition,回滾 roolback 等。

CoreText 是什麼?

CoreText 是 Apple 官方一個標准專業排版框架。它可以精確的處理圖片,問題的位置。一般用 CoreText 用在圖文混排上。

FMDB 的原理是?

FMDB 是一個開源的封裝了 Apple 底層 C 的 sqlite3 數據庫,他使用方便。支持標准 sql 語句,支持多線程處理,支持是事務,回滾等。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved