iOS冷知識

來源:互聯網
上載者:User

標籤:

首先聲明 轉載的  不過忘了地址在哪將就看吧

數組中的指標 int array[3] = {11,22,33} 

&array[0] 可看做是一個指標,指向array[0],指向int類型的資料(4個位元組的資料) 

array 可看做是一個指標:指向array[0], 同價與&array[0] 

&array 可看做是一個指標,指向array 數組,array[3] 就是12個位元組的資料 

static的使用 

修飾局部變數,修改的是生命週期 

static修飾的局部變數,在整個程式運行過程中,只初始化一次,而且只有一份記憶體 

static修飾的局部變數,並沒有改變範圍 

修飾全域變數,修改的是範圍 

沒有被static修飾的全域變數,項目中的任何檔案,可以訪問

 static修飾的全域變數,只在當前檔案中訪問 

const 與define使用的區別 

define修飾的變數不指定類型,const的指定類型 

defien修飾的變數每次引用都開闢一次記憶體,而const只有一份記憶體 

如果修飾的是程式碼片段適合用define,如果修飾的是變數適合用const 

isMemberOfClass 和 isKindOfClass 的聯絡和區別

 聯絡:兩者都能檢測一個對象是不是某個類的成員 

區別:isKindOfClass不僅能確定一個對象是不是某個類的成員,也能確定一個對象是否是派生自該類的類的成員,而isMemberOfClass只能做到前者. 

assign,retain,copy 的區別 

assign:普通賦值,一般常用於基礎資料型別 (Elementary Data Type),常見委託設計模式,防止循環參考.(我們稱之為弱引用)

 retain:獲得對象的所有權,引用計數在原有計數的基礎上加1. 

copy: 一般認為,是在記憶體中重新開闢了一個新的記憶體空間,用來儲存新的對象,和原來的對象是兩個不同的地址,引用計數分別為1。但是當copy對象為不可變對象時,那麼copy 的作用相當於retain。因為,這樣可以節約記憶體空間 

nil, Nil,NULL 與 NSNull 的區別 

nil 指向一個對象的指標為空白,在objc.h 的定義如下: NSString *name = nil; 

Nil 指向一個類的指標為空白,定義如下: Class aClass = Nil; 

NULL 指向C類型的指標為空白, 例如: int*pInt = NULL;

 NSNull 在Objective-C中是一個類,只是名字中有個Null,多用於集合(NSArray,NSDictionary)中值為空白的對象 

多線程 

多線程原理 

同一時間,CPU只能處理1條線程,多線程並發執行,其實是CPU快速地在多條線程之間調度 

線程非常多的危害: CPU在N多個線程之間調度,CPU會累死,消耗大量的CPU資源 

每條線程被調度執行的頻次會降低(線程的執行效率降低) 

多線程的實現方案 

pthread一套通用的多線程API,適用於Unix/Linux/Windows等系統,跨平台\可移植,使用難度大, C語言,程式員管理生命週期,項目中幾乎不用 

NSThread使用更加物件導向,簡單易用,可直接操作, OC語言,程式員管理生命週期,項目中偶爾使用

 GCD旨在替代NSThread等線程技術,充分利用裝置的多核,C語言,自動管理生命週期,項目中經常使用 NSOperation基於GCD(底層是GCD),比GCD多了一些簡單實用的功能,使用更加物件導向, OC語言,自動管理生命週期,項目中經常使用 

多線程的安全隱患 

資源共用,1塊資源可能會被多個線程共用,比如多個線程訪問同一個對象,同一個變數,同一個檔案 

安全隱患解決--互斥鎖 

互斥鎖使用格式 @synchronized(鎖對象){//需要鎖定的代碼} 

互斥鎖的優缺點 

優點:能有效防止因多線程搶奪資源引起的資料安全問題 

缺點:需要消耗大量的CPU資源 

相關專業術語:線程同步,多條線程在同一條線上執行(按順序地執行任務) 

補充

 OC在定義屬性的時有nonatomic和atomic兩種選擇 

atomic:原子屬性,為setter方法加鎖(預設是atomic),安全執行緒,需要消耗大量的資源 

nonatomic:非原子屬性,不會為setter方法加鎖,非安全執行緒,適合記憶體小的行動裝置 

GCD 

全稱Grand Central Dispatch"牛逼的中樞調度器" 

多核的並行運行,自動管理線程的生命週期(建立線程,調度任務,銷毀任務)

 CGD 2個核心概念:

 任務執行什麼操作,隊列用來存放任務 

將任務添加到隊列中,CGD會自動講隊列中的任務取出,放到對應的線程中執行 

同步和非同步主要影響:能不能開啟新的線程 

同步:只在當前線程中執行任務,不具備開啟新線程的能力 

非同步:可以在新的線程中執行任務,具備開啟新線程的能力 

TCP 和UDP 的區別與聯絡 

TCP 為傳輸控制層協議,為連線導向,可靠的,點到點的通訊 

UDP 為使用者資料包通訊協定,非串連的不可靠的點到多點的通訊 

TCP 側重可靠傳輸,UDP 側重快速傳輸 

網路層協議 

應用程式層: 

使用者介面、應用程式; 

Application典型裝置:網關; 

典型協議、標準和應用:TELNET、FTP、HTTP 

展示層: 

資料表示、壓縮和加密presentation 

典型裝置:網關 

典型協議、標準和應用:ASCLL、PICT、TIFF、JPEG|MPEG 

展示層相當於一個東西的表示,表示的一些協議,比片、聲音和視頻MPEG。 

會話層: 

會話的建立和結束; 

典型裝置:網關; 

典型協議、標準和應用:RPC、SQL、NFS、X WINDOWS、ASP 

傳輸層: 

主要功能:端到端控制Transport; 

典型裝置:網關; 

典型協議、標準和應用:TCP、UDP、SPX 

網路層: 

主要功能:路由、定址Network; 

典型裝置:路由器;

 典型協議、標準和應用:IP、IPX、APPLETALK、ICMP; 

資料連結層: 

主要功能:保證無差錯的疏忽鏈路的data link; 

典型裝置:交換器、橋接器、網卡; 

典型協議、標準和應用:802.2、802.3ATM、HDLC、FRAME RELAY; 

物理層: 

主要功能:傳輸位元流Physical; 

典型裝置:集線器、中繼器 

典型協議、標準和應用:V.35、EIA/TIA-232. 

TCP 三向交握 

第一次握手:用戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認; 

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包,即SYN+ACK包,此時伺服器進入SYN+RECV狀態; 

第三向交握:用戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此發送完畢,用戶端和伺服器進入ESTABLISHED狀態,完成三次狀態。 

Socket 連結和 HTTP 連結 

HTTP協議是基於TCP串連的,是應用程式層協議,主要解決如何封裝資料。Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。 HTTP串連:短串連,用戶端向伺服器發送一次請求,伺服器響應後串連斷開,節省資源。伺服器不能主動給用戶端響應(除非採用HTTP長串連技術),iPhone主要使用類NSURLConnection。 

Socket串連:長串連,用戶端跟伺服器端直接使用Socket進行串連,沒有規定串連後斷開,因此用戶端和伺服器段保持串連通道,雙方可以主動發送資料,一般多用於遊戲.Socket預設連線逾時時間是30秒,預設大小是8K(理解為一個資料包大小)。 

HTTP協議,get 與 post 的區別 

POST請求:參數在請求資料區放著,相對GET請求更安全,並且資料大小沒有限制。把提交的資料放置在HTTP包的包體中. 

GET請求:參數在地址後拼接,沒有請求資料,不安全(因為所有參數都拼接在地址後面),不適合傳輸大量資料(長度有限制,為1024個位元組)。

 HTTPS:安全超文字傳輸通訊協定 (HTTPS)(Secure Hypertext Transfer Protocol),它是一個安全通訊通道,基於HTTP開發,用於客戶電腦和伺服器之間交換資訊,使用安全套結字層(SSI)進行資訊交換,即HTTP的安全版。 

網路訊息推送 

一種是Apple自己提供的通知伺服器(APNS伺服器),一種是用第三方推送機制 

首先,系統彈出提示框詢問使用者是否允許,當使用者允許後向蘋果伺服器(APNS)請求deviceToken,並由蘋果伺服器發送給自己的應用,自己的應用將deviceToken以及想要推送的資訊發送給蘋果伺服器,蘋果伺服器將資訊發送給應用 

推送資訊內容,總容量不超過356位元組 

loadview , viewDidLoad, viewdidUnload 的關係 

第一次訪問UIViewController的view時,view為nil,然後就會調用loadview方法建立view

 view建立完畢後會調用viewDidLoad方法進行介面元素的初始化 

當 記憶體警告時,系統可能會釋放UIViewController的view,將view賦值為nil,並且調用viewDidUnload方法 

當再次訪問UIViewController的view時,view已經被賦值為nil,所以又會調用loadview方法重建view 

view被重新建立完畢後,還是會調用viewDidLoad方法進行介面元素的初始化 

load 和 initialize 的區別 

共同點: 

在不考慮開發人員主動使用的情況下,系統最多會調用一次,如果父類和子類都被調用,父類的調用一定在子類之前,都是為了應用運行提前建立合適的運行環境,在使用時都不要過重地依賴於這兩個方法,除非真正必要. 

區別: 

load方法調用時機比較早,運行環境有不確定因素。具體說來,在iOS上通常就是App啟動時進行載入,但當load調用的時候,並不能保證所有類都載入完成且可用,必要時還要自己負責做auto release處理。對於有依賴關係的兩個庫中,被依賴的類的load會優先調用。但在一個庫之內,調用順序是不確定的。 補充 

對於一個類而言,沒有load方法實現就不會調用,不會考慮對NSObject的繼承。 一個類的load方法不用寫明[super load],父類就會收到調用,並且在子類之前。 Category的load也會收到調用,但順序上在主類的load調用之後。 不會直接觸發initialize的調用。

iOS冷知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.