日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS 多线程原理

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS 多线程原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iPhone中的線程應用并不是無節制的,官方給出的資料顯示iPhone OS下的主線程的堆棧大小是1M,第二個線程開始都是512KB。并且該值不能通過編譯器開關或線程API函數來更改。只有主線程有直接修改UI的能力。

一.線程概述

  • 一個運行著的程序就是一個進程或者叫做一個任務,一個進程至少包含一個線程,線程就是程序的執行流。
    • Mac和iOS中的程序啟動,創建好一個進程的同時, 一個線程便開始運行,這個線程叫主線程。
    • 主線程在程序中的地位和其他線程不同,它是其他線程最終的父線程,且所有界面的顯示操作即AppKit或 UIKit的操作必須在主線程進行。
  • 系統中的每一個進程都有自己獨立的虛擬內存空間,而同一個進程中的多個線程則共用進程的內存空間。
    • 每創建一個新的線程,都需要一些內存(如每個線程有自己的Stack空間)和消耗一定的CPU時間。
    • 另外當多個線程對同一個資源出現爭奪的時候需要注意線程安全問題。

二.創建線程

創建一個新的線程就是給進程增加了一個執行流,執行流總得有要執行的代碼吧,所以新建一個線程需要提供一個函數或者方法作為線程的入口。
  • 1.使用NSThread

    • NSThread提供了創建線程的途徑,還可以提供了檢測當前線程是否是主線程的方法。 使用NSThread創建一個新的線程有兩種方式:
      • 1.創建一個NSThread的對象,調用其start方法。對于這種方式的NSThread對象的創建,可以使用一個目標對象的方法初始化一個NSThread對象,或者創建一個繼承NSThread類的子類,實現其main方法,然后在直接創建這個子類的對象。
      • 2.使用 detachNewThreadSelector:toTarget:withObject:這個類方法創建一個線程,這個比較直接了,直接使用目標對象的方法作為線程啟動入口。
  • 2.使用NSObject

    • 其實NSObject直接就加入了多線程的支持,允許對象的某個方法在后臺運行。如:
      [myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
  • 3.POSIX Thread
    • 由于Mac和iOS都是基于Darwin系統,Darwin系統的XUN內核,是基于Mach和BSD的,繼承了BSD的POSIX接口,所以可以直接使用POSIX線程的相關接口來使用線程。
    • 創建線程的接口為 pthread_create,當然在創建之前可以通過相關函數設置好線程的屬性。以下為POSIX線程使用簡單的例子。

三.多線程進階

  • NSOperation&NSOperationQueue

    • 很多時候我們使用多線程,需要控制線程的并發數,畢竟線程也是消耗系統資源的,當程序中同時運行的線程過多時,系統必然變慢。 所以很多時候我們會控制同時運行線程的數目。

    • NSOperation可以封裝我們的操作,然后將創建好的NSOperation對象放到NSOperationQueue中,OperationQueue便開始啟動新的線程去執行隊列中的操作,OperationQueue的并發度是可以通過如下方式進行設置:

      - (void)setMaxConcurrentOperationCount:(NSInteger)count

總結

以上是生活随笔為你收集整理的IOS 多线程原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。