1. 程式人生 > >iOS開發之Notification與多執行緒

iOS開發之Notification與多執行緒

一、概述

在多執行緒中,無論在哪個執行緒註冊了觀察者,Notification接收和處理都是在傳送Notification的執行緒中的。所以,當我們需要在接收到Notification後作出更新UI操作的話,就需要考慮執行緒的問題了,如果在子執行緒中傳送Notification,想要在接收到Notification後更新UI的話就要切換回到主執行緒。先看一個例子:

1234567891011121314151617181920212223-(void)viewDidLoad{[superviewDidLoad];NSString *NOTIFICATION_NAME=@"NOTIFICATION_NAME"
;NSLog(@"Current thread = %@",[NSThread currentThread]);[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(handleNotification:)name:NOTIFICATION_NAME object:nil];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{NSLog(@"Post notification,Current thread = %@"
,[NSThread currentThread]);[[NSNotificationCenter defaultCenter]postNotificationName:NOTIFICATION_NAME object:nil userInfo:nil];});}-(void)handleNotification:(NSNotification *)notification{NSLog(@"Receive notification,Current thread = %@",[NSThread currentThread]);}

執行結果:

1 2 3 NotificationTest[23457:1615587]Currentthread=<NSThread:0x608000078080>{number=1,name=main} NotificationTest[23457:1615738]PostnotificationCurrentthread=<NSThread:0x60000026c500>{number=3,name=(null)} NotificationTest[23457:1615738]ReceivenotificationCurrentthread=<NSThread:0x60000026c500>{number=3,name=(null)}

上面我們在主執行緒註冊觀察者,在子執行緒傳送Notification,最後Notification的接收和處理也是在子執行緒。

二、重定向Notification到指定執行緒

當然,想要在子執行緒傳送Notification、接收到Notification後在主執行緒中做後續操作,可以用一個很笨的方法,在 handleNotification 裡面強制切換執行緒:

123456-(void)handleNotification:(NSNotification *)notification{NSLog(@"Receive notification,Current thread = %@",[NSThread currentThread]);dispatch_async(dispatch_get_main_queue(),^{NSLog(@"Current thread = %@",

相關推薦

iOS開發Notification執行

一、概述 在多執行緒中,無論在哪個執行緒註冊了觀察者,Notification接收和處理都是在傳送Notification的執行緒中的。所以,當我們需要在接收到Notification後作出更新UI操作的話,就需要考慮執行緒的問題了,如果在子執行緒中傳送Noti

iOS開發再探執行程式設計:Grand Central Dispatch詳解

Swift3.0相關程式碼已在github上更新。之前關於iOS開發多執行緒的內容釋出過一篇部落格,其中介紹了NSThread、操作佇列以及GCD,介紹的不夠深入。今天就以GCD為主題來全面的總結一下GCD的使用方式。GCD的歷史以及好處在此就不做過多的贅述了。本篇部落格會通過一系列的例項來好好的總結一下GC

iOS 開發 執行詳解Pthread實現執行

pthread基礎 實現多執行緒的技術方案之一. pthread是POSIX thread的簡寫.表示跨平臺的執行緒介面. 多執行緒的開發框架,由於是跨平臺的C語言框架,在蘋果的標頭檔案中並沒有詳細

Java執行學習筆記21單例模式執行

詳細程式碼見:github程式碼地址   第六章 單例模式與多執行緒 前言: 我之前已經開設了23個設計模式這個專欄,介紹了很多的Java設計模式,其中一些模式對於絕 大多數程式語言設計思想都是類似的,需要了解單例模式的可以去看看。 我們在實際開發中經常用到單例模式,但

Java執行安全執行開發

網際網路上充斥著對Java多執行緒程式設計的介紹,每篇文章都從不同的角度介紹並總結了該領域的內容。但大部分文章都沒有說明多執行緒的實現本質,沒能讓開發者真正“過癮”。 從Java的執行緒安全鼻祖內建鎖介紹開始,讓你瞭解內建鎖的實現邏輯和原理以及引發的效能問題,接著說明了Java多執行緒程式設計中鎖的存在是為

Java面向物件執行綜合實驗(五)JDBC

本次程式碼沿用第三次中的User.java Administrator.java Operator.java Browser.java和Doc.java 以及第四次中的LoginWindow.java MenuWindow.java UserWindow.java UpDownloadWin

Java面向物件執行綜合實驗(四)GUI設計

瞭解Java圖形介面程式的基本結構;掌握Java佈局管理和常用元件的使用;掌握Java事件處理機制。 實驗內容 編寫程式,將前面課程所編寫的檔案管理系統改編為圖形使用者介面。要求程式介面選用合適的佈局,綜合使用選單、按鈕、文字框、密碼框、下拉列表、檔案對話方塊等元件,實現良好的人機介面。

Java面向物件執行綜合實驗(三)輸入輸出流

瞭解Java中I/O流的概念和種類;掌握位元組流處理和字元流處理,包括File類,InputStream/OutputStream及其子類,Reader/Writer及其子類;熟練掌握檔案的順序處理,隨機訪問處理;熟悉物件序列化的概念和方法。 編寫程式,實現檔案管理系統中的檔案上傳/下載模組

Java面向物件執行綜合實驗(二) 異常處理

理解異常的基本概念;瞭解Java異常的層次結構;熟悉並掌握Java異常的捕獲處理方法。 (1)閱讀Java™ Platform, Standard Edition 8 API Specification文件,瞭解後續程式設計中將要處理的IOException及其子類FileNotFoundE

Java面向物件執行綜合實驗(一)封裝、繼承

編寫一個程式,實現檔案管理系統中的使用者管理模組。要求模組中實現使用者的模擬登入過程。通過使用者輸入,獲取使用者名稱和口令;與事先記錄在程式中的使用者資訊進行對比,通過口令驗證後才能使用系統。使用者分為系統管理人員、檔案錄入人員,檔案瀏覽人員三類,相關類圖如下所示。 (1)要求在使用者類中

併發執行基礎執行之間共享資料

1、共享資料帶來什麼問題?        A、條件競爭:併發中競爭條件的形成,取決於一個以上執行緒的相對執行順序,每個執行緒都搶著完成自己的任務。大多數情況下,即使改變執行順序,也是良性競爭,其結果可以接受。例如,有兩個執行緒同時向一個處理佇列中新增任務,因為系統提供的不變數

設計模式初探三------單例模式執行

單例模式:保證系統中一個類只有一個例項。即一個類只有一個物件例項  如何實現: 一是單例模式的類只提供私有的建構函式, 二是類定義中含有一個該類的靜態私有物件, 三是該類提供了一個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。 以下是具體示例: 1、假設有一個企業名為

執行使用執行執行響應同步

需求: 匯出資料10000條資料到excel表中。希望用多執行緒優化匯出速度。 設計: 將10000條資料分成10份。用10個執行緒分別給excel寫值分10個sheet頁 問題: 匯出資料時,由於寫值啟動了多執行緒,匯出資料為空excel表格 問題的梳理: 由於

java架構路(執行)原子操作,AtomicUnsafe魔術類

  這次不講原理了,主要是一些應用方面的知識,和上幾次的JUC併發程式設計的知識點更容易理解. 知識回顧:   上次主要說了Semaphore訊號量的使用,就是一個票據的使用,我們舉例了看3D電影拿3D眼鏡的例子,還說了內部的搶3D眼鏡,和後續排隊的原始碼解析,還有CountDownLatch的使用,我們是用

IOS開發——objectForKeyvalueForKey在NSDictionary中的差異

什麽 iat app 報錯信息 lease 方法 去掉 defined atom 從 NSDictionary 取值的時候有兩個方法,objectForKey: 和 valueForKey:,這兩個方法具體有什麽不同呢? 先從 NSDictionary 文檔中來看這兩個方法

iOS開發地圖定位

control 移動 idt line tor mkmapview 什麽 .cn 構建   不管是QQ還是微信的移動client都少不了定位功能,之前在微信demo中沒有加入定位功能,今天就寫個定位的小demo來了解一下定位和地圖的東西。地圖和定位看上去是挺高大

c#中委託執行的實質

delegate(委託)的概念,.Net的委託本質上就是指向函式的指標,只不過這種指標是經過封裝後型別安全的。委託和執行緒是兩個不同的概念,執行緒是動態的,委託就是一個或一組記憶體地址,是靜態的。執行緒執行時如果遇到了指向函式的指標就執行這個函式。.Net為了方便程式設計,給委託賦予了兩種方式以供呼

第六章單例模式執行——立即載入“餓漢模式”延遲載入“懶漢模式”

立即載入就是使用類的時候已經將物件建立完畢了,也稱為“餓漢模式” package test01; public class MyObject { // 建立物件 private static MyObject object = new MyObject(); private MyObjec

爬蟲執行

多執行緒和多程序爬蟲   一.執行緒 1.什麼是執行緒。 執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序中,是進城中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個執行緒可以併發多個執行緒,每條執行緒執行不同的任務。   2.執行緒常用的方法

iOS開發NSDictionaryNSMutableDictionary

NSDictionary不可變字典 1、[NSDictionary dictionaryWithObjectsAndKeys:..]: 使用鍵值對兒直接建立字典物件,結尾必需使用nil標誌結束。 2、[NSDictionary initWithObjectsAndKeys:..]: