iOS內IPC 程序間通訊 方法小結

2021-06-20 13:34:03 字數 2038 閱讀 4123

受限與ios系統的執行機制,絕大多數情況下乙個應用在進入後台後會馬上進入suspend或terminate狀態,也就是說不能執行**,ios中也沒有類似windows中service的概念,但存在某些例外:

2:某些特定型別的應用,具體包括:

既然大多數情況下系統中只有乙個活動的應用在執行,加上ios內不同應用由於沙箱執行導致的高度隔離,我們熟悉的那些ipc方法,例如管道、郵槽、共享記憶體、socket等,往往會顯得比較無力了,針對此種情況,蘋果也提供了對應的解決方案,也就是我們今天將要介紹的:url schema

簡單來說,url schema就是ios內的應用呼叫協議,應用a可以宣告自定義的呼叫協議,就如http/https那樣,當另乙個應用b打算在應用內開啟應用a時,可以開啟使用a自定義的協議開頭的url來開啟a,除了協議頭,url中還可以附加其他引數,具體過程參見下圖:

這個就是safari與alocola之間的互動過程。

接下來介紹一下自定義url schema的過程。

1:建立xcode專案

2:開啟專案,在其中的info.plist中新增如下圖所示字段:

其中的"lifengzhong"便是我為此應用註冊的自定義協議名稱,其他應用如果想呼叫我的應用,只要開啟形似:「lifengzhong://***」的url便可以了。

[cpp] view plain

copy

- (

bool

return

yes;  

}

此函式便是url call的處理函式了,每當其他應用通過url開啟此應用時,該函式都會被呼叫。

4:當另乙個應用想呼叫我的應用時,只需拼接好url,,然後開啟url即可,十分方便:

[cpp] view plain

copy

nsurl* url = [nsurl urlwithstring: @

"lifengzhong://1,545166"

];  

這裡的1,545166是我自定義的引數,你可以根據自己需要定義url的格式。

通過上面介紹的url schema方法,算是實現了某種程度的程序間通訊,但這種方式的乙個缺點是,同一時刻還是只能有乙個程序在前台,主動呼叫的應用在呼叫成功後必須進入後台,所以能傳遞的只有url中所帶的引數或annotation中所帶的引數。呼叫的過程中會出現應用之間的切換,使用者體驗不好。但聊勝於無,蘋果好歹還是留了這麼乙個口子,感恩吧。

iOS內IPC 程序間通訊 方法小結

受限與ios系統的執行機制,絕大多數情況下乙個應用在進入後台後會馬上進入suspend或terminate狀態,也就是說不能執行 ios中也沒有類似windows中service的概念,但存在某些例外 2 某些特定型別的應用,具體包括 既然大多數情況下系統中只有乙個活動的應用在執行,加上ios內不同...

程序間通訊 IPC 方法

程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是用於兩個程序之間的通訊,首...

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...