iOS各種小理論知識


page1image1016

Objective-C 部分

1. 你如何理解 OC 的內存管理
OC 內存管理是基于引用計數。誰想使用某個對象 B,就要把對象 B 的計數器+1,如果不

使用這個對象了,那么就把對象 B 計數器-1,如果 B 對象計數器減到 0,那么 B 對象自動會調用自己的 dealloc 函數,也就是這個對象被銷毀。

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

系統有一個自動釋放池,對于一些對象我們可以放在自動釋放池中。如果自動釋放池本身銷毀,那么里面的內容會被全部調用 release.

  1. assign, retain, copy, autorelease, release, dealloc 的不同assign 就是基本的賦值,就是 C 的基本的賦值retain 就是讓對象引用計數+1,表示擁有了這個對象copy 把對象復制一份。copy 是深拷貝,淺拷貝auorelease 把對象放在自動釋放池里面

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

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

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

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

  3. 什么是深拷貝和淺拷貝 copy

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

  4. copy mutableCopy 是什么
    mutableCopy 可變拷貝 NSString -- mutableCopy- NSMutableStringNSArray -- mutableCopy- NSMutableArray;
    NSMutableString -
    copy---NSString

  5. #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

page2image12528

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,那么用戶體驗差,解決方法是啟動線程在后臺使用濾鏡算法處理圖像,一旦處理完就通知主線程刷新界面.在比如:網絡下載數據,由于網絡狀態好壞時間會不確定,那么我們需要使用線程來處理這種不確定的關系,一定數據接收完成,那么就可以通知主線程處理。再比如讀取數據全國電話號碼數據庫,時間很長,那么就需要通過線程來做特別強調的是,線程不是快。是為了給用戶一個快得假象

page3image8536


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 都可以

page4image10104


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 就是在中間把 ModelView 耦合在一起。因為大型軟件要求 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 語句更方便.

page5image12264

HTTP 斷點下載原理


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

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

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

page6image3160

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

libev 宏展開

想看源碼,宏太多,看著累,宏展開,再看,功力時間不夠,先放下 放上宏展開后的代碼。 libev4.20 展開方示為 ./configure 修改makefile文件,字符串 替換CC為 CPP 注意要把基礎的CC定義保留 make mv …

FreeRTOS高級篇7---FreeRTOS內存管理分析

原文:http://blog.csdn.net/zhzht19861011/article/details/51606068 內存管理對應用程序和操作系統來說都非常重要。現在很多的程序漏洞和運行崩潰都和內存分配使用錯誤有關。 FreeRTOS操作系統將內核與內存管理分開實現,操作系統內核僅規定了必要的內…

筆試題

1.是不是一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態? virtual修飾符會被隱形繼承的。private 也被集成,只事派生類沒有訪問權限而已。virtual可加可不加。子類的空間里有父類的所有變量(static除外)。同一個函數只存…

FreeRTOS學習筆記——互斥型信號量

來自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系統中互斥型信號量是任務間資源保護的重要手段。下面結合一個具體例子說明FreeRTOS中的互斥型信號量如何使用。 【相關博文】 【FreeRTOS STM32移植筆記】 【FreeRTOS學習筆記…

JSP動態網站環境搭建應用中的詳細步驟(Tomcat和Apache/IIS的整合)

鏈接地址:http://www.cnblogs.com/dartagnan/archive/2011/03/25/2003426.html JSP動態網站環境搭建應用中的詳細步驟(Tomcat和Apache/IIS的整合)sun推出的JSP(Java Server Pages)是一種執行于服務器端的動態網頁開發技術,它基于J…

關于JS獲取select值的兩種實現方法

前幾天發了一篇關于javascript獲取select值的方法&#xff0c;后來發現有另一種實現方法&#xff0c;所以就都發出來比較一下&#xff1a; 方法一&#xff1a;通過獲取option標簽的value值來確定&#xff1a; <!DOCTYPE html> <html> <head><meta charset…

c語言題庫1

1. 用預處理指令#define 聲明一個常數&#xff0c;用以表明1年中有多少秒&#xff08;忽略閏年問題&#xff09; #define time (365*24*60*60) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365) 2. 寫一個“標準”宏MIN&#xff0c;這個宏輸入兩個參數并返回較小的一個。 #di…

FreeRTOS系列第19篇---FreeRTOS信號量

來自&#xff1a;http://blog.csdn.net/zhzht19861011/article/details/50835613 本文介紹信號量的基礎知識&#xff0c;詳細源碼分析見《FreeRTOS高級篇6---FreeRTOS信號量分析》 1.信號量簡介 FreeRTOS的信號量包括二進制信號量、計數信號量、互斥信號量&#xff08;以后簡稱…

mysql語法替換字符串

UPDATE ht_business_task SET url REPLACE ( url, &amp;, & )轉載于:https://www.cnblogs.com/lz20150121/p/5030739.html

POJ1274 The Perfect Stall(二分圖)

題意&#xff1a; 一些奶牛只有在特定的圍欄中才能產奶&#xff0c;要求合理安排使能產奶的奶牛數達到最大。 要點&#xff1a; 二分圖裸題&#xff0c;最近剛學了二分圖&#xff0c;看下面的參考博客&#xff0c;寫的比較好&#xff1a; 參考博客&#xff1a;匈牙利算法 15479…

藍牙HCI剖析(一)

來自&#xff1a;http://blog.csdn.net/xiaoxiaopengbo/article/details/51334257 一.HCI介紹 HCI提供了訪問bluetooth control的統一接口&#xff0c;通俗來講&#xff0c;就是定義了特定的格式來控制藍牙芯片來做相應的動作&#xff08;比如inquiry,connect,disconnect&#…

c語言題庫2

96. struct name1{ char str; short x; int num; } struct name2{ char str;0 1 2 3 int num; 4 5 6 7 short x; 8 9 10 11 } sizeof(struct name1)? sizeof(struct name2)? 8、12 97. 讀文件file1.txt的內容&#xff08;例如&#xff09;&#xff1a; 12 34 56 …

ASP.NET狀緩存Cache的應用-提高數據庫讀取速度

ASP.NET狀緩存Cache的應用-提高數據庫讀取速度 原文:ASP.NET狀緩存Cache的應用-提高數據庫讀取速度一、 Cache概述 既然緩存中的數據其實是來自數據庫的&#xff0c;那么緩存中的數據如何和數據庫進行同步呢&#xff1f;一般來說&#xff0c;緩存中應該存放改動不大或者對…

2016年學習Linux決心書(老男孩教育在線課程班第二期)

我經過這4-5個月的學習后&#xff0c;我一定要達到月薪20&#xff2b;&#xff0c;為了達到這個目標我要付出如下10大行動&#xff1a;1.提前預習上課內容2.上課認真聽講&#xff0c;做好上課筆記3.課后認真做總結&#xff0c;完善筆記5.反復做實驗&#xff0c;并寫實驗文檔6.學…

WPF XAML 從零開始認識XAML

來自&#xff1a;http://blog.csdn.net/aoshilang2249/article/details/44158403 剖析最簡單的XMAL代碼: [html] view plaincopy <Window x:Class"MyFirstApplication.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentati…

c語言題庫3

143. 枚舉元素本身由系統定義了一個表示序號的數值&#xff0c;從0 開始順序定義為0&#xff0c;1&#xff0c;2…。如在weekday中&#xff0c;sun值為0&#xff0c;mon值為1&#xff0c; …,sat值為6。 main(){  enum weekday  {   sun,mon,tue,wed,thu,fri,sat  } a,b…

入門級----測試的執行、環境的搭建、每日構建、測試記錄和跟蹤、回歸測試、測試總結和報告...

測試用例的準備&#xff0c;都是為了執行測試準備的。 測試環境的搭建 &#xff08;1&#xff09;測試數據&#xff1a;有些測試需要使用大批量的數據&#xff0c;例如容量測試、壓力測試等。根據產品的具體測試要求&#xff0c;可能需要在數據庫表插入大量的數據&#xff0c;準…

MFC讀取配置文件GetPrivateProfileString

VC中 3 個主要 寫入/讀取配置文件ini的函數&#xff1a;bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);寫入.ini文件&#xff1b;DWORDGetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpD…

UESTC 250 windy數 數位dp

題目鏈接 1 #include<bits/stdc.h>2 using namespace std;3 #define mem1(a) memset(a, -1, sizeof(a))4 #define ll long long5 int dp[20][20], digit[20], len;6 ll dfs(int len, int pre, bool fp, bool first) { //first表示前面的數是否全部為0&#xff0c; pr…

c語言面試題大全

C語言面試題大匯總 4. static有什么用途&#xff1f;&#xff08;請至少說明兩種&#xff09; 1.限制變量的作用域(DL:使其只在定義的當前文件中起作用&#xff0c;static是只能由與變量在同一個文件中定義的程序存取的全局變量。也就是說使全局變量成為文件的私有變量&#…