NSNotificationCenter

前幾天面試富途證券,被問到添加通知的相關問題,當時有幾個問題答錯了,在此總結。

使用通知的要點

1.注冊多少次,他的執行代碼就會執行多少次

//1、注冊多個通知
for (int i =0; i<3; i++) {[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod:) name:@"testNotifycation" object:nil];}
//2、傳遞通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"testNotifycation" object:nil];

輸出結果

2016-12-01 17:06:23.868 NotifycationDemo[28703:10079806] receive notifycation object (null)
2016-12-01 17:06:23.868 NotifycationDemo[28703:10079806] receive notifycation object (null)
2016-12-01 17:06:23.869 NotifycationDemo[28703:10079806] receive notifycation object (null)

2.雖然注冊多次通知,但是移除一次通知,同一個對象通知就會全部移除

?

3.addRemove相關方法成對出現我們平時在使用通知的時候可能會在viewWillAppear方法里面add觀察者,viewWillDisappear里面remove,但是我們如果忘記remove,那么如果我們導航到當前頁面再導航到另外一個頁面,然后再退回當前頁面,這時候我們會得到2個輸出結果。

- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];//注冊通知[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod:) name:@"testNotifycation" object:nil];
}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];//沒有remove通知
}

2016-12-01 17:24:13.722 NotifycationDemo[28820:10087367] receive notifycation object (null)

2016-12-01 17:24:13.723 NotifycationDemo[28820:10087367] receive notifycation object (null)


4.移除一個name沒有add的通知,不會崩潰

[[NSNotificationCenter defaultCenter]removeObserver:self name:@"unknownName" object:nil];




5 .?一個對象添加了觀察者,但是沒有移除,程序不會崩潰,這是為啥



@implementation NotifyTestClass- (void)registerMyNotifycation{[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod) name:@"testNotifycation" object:nil];
}- (void)notifycationMehod{NSLog(@"NotifyTestClass receive notify");
}- (void)dealloc{NSLog(@"NotifyTestClass dealloc");
}
@end//局部變量 立刻釋放NotifyTestClass *nt = [[NotifyTestClass alloc]init];[nt registerMyNotifycation];
//發送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"testNotifycation" object:nil];

輸出結果

2016-12-01 19:29:15.039 NotifycationDemo[29035:10119206] NotifyTestClass dealloc

蘋果官網文檔有說明,iOS 9.0之后NSNotificationCenter不會對一個dealloc的觀察者發送消息所以這樣就不會崩潰了。果真我換了一個8.1的手機測試,程序崩潰了,原來是做了優化。

6 .?ViewController對象在銷毀的時候,系統會對他監聽的通知進行清除

@implementation TwoViewController- (void)viewDidLoad {[super viewDidLoad];[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifycationMehod) name:@"testNotifycation" object:nil];// Do any additional setup after loading the view from its nib.
}
- (void)notifycationMehod{NSLog(@"TwoViewController receive notify");
}
- (void)dealloc{NSLog(@"TwoViewController dealloc");
}
@end

輸出結果

2016-12-02 16:36:42.175 NotifycationDemo[31359:10305477] TwoViewController dealloc
2016-12-02 16:36:42.176 NotifycationDemo[31359:10305477] removeObserver = <TwoViewController: 0x7fa42381d720>

7 .?處理方法是和post通知方法在同一線程同步執行的


因此我們如果要接受一些通知更新UI的時候,我們需要回到主線程來處理。
 dispatch_async(dispatch_get_main_queue(), ^{//do your UI});

?

Reference:

NSNotificationCenter/NSNotification 使用注意點全面解析

深入思考NSNotification

?
?

轉載于:https://www.cnblogs.com/H7N9/p/6653862.html

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

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

相關文章

java ajax html復選框,HTMLjavaSkcriptCSSjQueryajax(九)(示例代碼)

一、HTML1、單選按鈕 Male Female2、復選框 I have a Car3、下拉列表 VoloFita如果設置某項選定直接 fem4、設置文本域 創建按鈕 5、Runnob.com因為a 標簽的target屬性名是inframe_a的iframe框架&#xff0c;點擊鏈接后頁面會在iframe 中出現。6、腳本 JavaScript …

Spring和JSF集成:選擇項目

使用JSF&#xff0c;要使用組合框&#xff0c;列表框和復選框&#xff0c;您需要了解javax.faces.model.SelectItem類。 SelectItem表示單個可選選項。 它既包含渲染所需的信息&#xff0c;又包含選擇該項目時應綁定的值。 在大多數情況下&#xff0c; SelectItems是使用值和標…

apt-get update 問題 及gcc高亮

一 gcc高亮 gcc 高亮有好幾種方法。 參考 http://www.cokco.cn/thread-39909-1-1.html 這個教程&#xff1a; &#xff08;1&#xff09; git clone https://github.com/chinaran/color-compile/ &#xff08;2&#xff09; cd color-compile make sudo make install&#xff0…

對于MVC中應用百度富文本編輯器問題的解決辦法

&#xff11;.對于應用富文本編輯器&#xff50;&#xff4f;&#xff53;&#xff54;提交表單內容提示有危險的解決辦法&#xff1a; [ValidateInput(false)] //文本編輯器的表單提交不用提示危險 [HttpPost] public ActionResult Create(FormCollection collection) 即在視圖…

html5頁面熱力圖幾十萬數據,基于百度地圖的數據可視化,包括大量數據的標繪以及熱力圖的插入...

(function(global, factory) {typeof exports object && typeof module ! undefined ? module.exports factory() :typeof define function && define.amd ? define(factory) :(global.PointLine factory());}(this, (function() {use strict;/*** autho…

管理Jenkins作業配置

在JBoss工具和Developer Studio中&#xff0c;我們在Jenkins中管理許多構建作業。 實際上&#xff0c;對于3.2.x / 4.x和3.3.x / 5.x流&#xff0c;有195個以上的作業。 當我們開始建立明年的第一個里程碑時&#xff0c;我們將再產生40多個工作崗位。 這里是其中的一些&#xf…

Redis命令拾遺三(列表List類型)

本文版權歸博客園和作者吳雙本人共同所有。轉載和爬蟲請注明原文地址 Redis五種數據類型之列表類型Redis五種數據類型之列表類型。你可以存儲一個有序的字符串列表一類數據。比如你想展示你所存儲的所有文章中的前十條&#xff0c;當分頁取下一頁的時候&#xff0c;你也可以取接…

angular2安裝筆記

主要摘自&#xff1a;http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/article/details/51788035 開始嘗試的時候npm install一直不能正常生成modules文件內的東東&#xff0c;后來試了多次才知道&#xff0c;大概是因為服務器…

計算機桌面上的聲音圖標沒了怎么辦,電腦聲音圖標不見了怎么辦超詳細教程

我們在用電腦或者平板看視頻、聽歌的時候&#xff0c;如果聲音不合適&#xff0c;大了或小了就會調節音量&#xff0c;除了可以選擇設備自帶的外部音量大小調節按鍵外&#xff0c;還可以用自帶的聲音圖標來調節&#xff0c;而屏幕上的聲音圖標是最方便的。如果屏幕上的聲音圖標…

XML解組基準:JAXB,STAx,Woodstox

介紹 上周末&#xff0c;我開始考慮如何以一種資源友好的方式處理大量XML數據。我要解決的主要問題是如何以塊的形式處理大型XML文件&#xff0c;同時提供上游/下游系統&#xff0c;需要處理一些數據。 當然&#xff0c;我已經使用JAXB技術已有幾年了。 使用JAXB的主要優點是可…

ArcGIS空間分析工具

1. 3D分析 1.1. 3D Features toolset 工具 工具 描述 3D Features toolset &#xff08;3D 要素工具集&#xff09; Add Z Information 添加 Z 信息 添加關于具有 Z 值的要素類中的要素的高程屬性的信息。 Buffer 3D 3D 緩沖 圍繞點或線創建三維緩沖區以生成球形或圓柱形的多面…

SHELL編程中如果路徑名遇到括號

linux中&#xff0c;如果文件名中帶括號&#xff0c;應先對括號處理&#xff0c;在“(”和“&#xff09;”前加上“\”。Bracket_Handle給出了處理方法&#xff1a;sub Bracket_Handle { my ($tmp_name) _; $tmp_name ~ s/\(/\\\(/g; # ( > \( $tmp_name ~ s/\)/…

計算機科學家和心理學家合作,生物智能與人工智能之間的合作

李飛飛帶領的斯坦福“以人為本AI研究院”發表文章&#xff0c;探討人工智能、神經科學、心理學和認知科學&#xff0c;以及數學、物理和社會科學等學科過去是怎樣、以及未來將如何共同合作&#xff0c;追求對理解和創造智能系統的探索。最初的類人智能出現在幾百萬年前的非洲大…

JavaOne 2012 – 2400小時! 一些建議

您可能已經看到JavaOne 2012 Content Catalog在線。 計劃委員會經過數周的艱苦工作&#xff0c;對每個提案進行了分類&#xff0c;審查&#xff0c;評分和討論&#xff0c;我們終于為您設置了&#xff08;希望如此&#xff09;有趣的組合。 整整105天或2400個小時&#xff0c;我…

C語言

自定義函數 &#xff08;1&#xff09;在函數使用之前定義函數 &#xff08;2&#xff09;先聲明這個函數&#xff0c;然后使用&#xff0c;使用的代碼后面定義這個函數 include <stdio.h> void syahello(){ println("helloo"); }int main(){ sayhello(); // 調…

【Centos】yum 安裝mariaDB

[dream361za ~]$ sudo yum search mariadb #查找需安裝的包 mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients #mariadb客戶端 mariadb-server.x86_64 : The MariaDB server and related files #mariadb服務 [dream361za ~]$ sudo yum instal…

對口升學計算機組裝與維護,對口升學信息技術(計算機)類2017年專業課考試大綱...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓山西省中等職業學校對口升學考試大綱信息技術類專業本考試大綱是以國家中等職業學校計算機專業教學指導方案為依據&#xff0c;以中等職業教育國家規劃教材《物理(電工電子類)》(李廣華、郝翠蘭主編&#xff0c;電子工業出版社)、《…

網頁性能優化(初窺)

面試的時候經常會被問到的有關于前端性能優化這一塊的問題&#xff0c;扯扯個人的理解 第一條&#xff1a;減少 HTTP 次數的請求 80%的最終用戶響應時間花在前端程序上&#xff0c;而其大部分時間則花在各種頁面元素&#xff0c; 如圖像、 樣式表、 腳本和 Flash 等&#xff0c…

STM32F10x_硬件I2C主從通信(輪詢發送,中斷接收)

Ⅰ、寫在前面 關注我分享文章的朋友應該知道我在前面講述過&#xff08;軟件、硬件&#xff09;I2C主機控制從機EEPROM的例子。在I2C通信主機控制程序是比較常見的一種&#xff0c;可以說在實際項目中&#xff0c;很多應用都會使用到I2C通信。但在實際項目中作為I2C從機的應用相…

JavaFX 2:創建登錄表單

在本教程中&#xff0c;我將使用JavaFX 2和CSS設計漂亮的Login Form 。 它是經典的登錄表單&#xff0c;帶有用戶名和密碼以及登錄按鈕。 為了遵循本教程&#xff0c;我強烈建議您查看以下這些教程&#xff1a; Eclipse IDE中的JavaFX 2入門 JavaFX 2&#xff1a;HBox JavaFX…