iOS 的 NSNotificationCenter 中哪些通知由系统未开启邮件发送自动发送

iOS 的 NSNotificationCenter 中哪些通知由系统自动发送_百度知道
iOS 的 NSNotificationCenter 中哪些通知由系统自动发送
提问者采纳
Frameworks&#47,Sound等)的通知机制;UIKFoundation,当计时结束。NSNotificationCenter是一个面向事件通知中心:都会被执行.framework 是支持MacOS的而 UILocalNotification 在 &#47,这个事件的标示符就是 myNSystem&#47,你注册一个通知事件到defaultCenter,他的原理是;Library&#47,那么所有生命周期中的myFunc首先.framework iOS可用UILocalNotification可以理解为RemoteNotification的一个Local实现。用途例如,就发一个通知,是一个面向UI的(支持Alert,NSNotificationCenter在 &#47,定时器,当有一个myName的通知被Post到通知中心;Library/System&#47,然后弹出提示;Frameworks&#47,这两个东西不在同一个框架中
中国移动互联网研发培训领导品...
主营:iOS培训,Android培训,HTML5培训,UI培训
其他类似问题
为您推荐:
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁iOS开发之通知中心(NSNotificationCenter)
面向对象的设计思想是把行为方法封装到每一个对象中,以用来增加代码的复用性。正是这种分散封装,增加了对象之间的相互关联,总是有很多的对象需要彼此了解以及相互操作!
一个简单示例说明这种交互产生的对象之间的相互依赖:
有一个列表框,每当列表框的某一项被选中时,就会弹出一个对话框,对话框包含一个或多个输入框,在输入框输入完毕 输入的文字要更新要列表中显示。文字描述有点拢蠹铱梢韵胍幌QQ的好友列表,这与其类似的!
只是这几个UI控件之间的交互逻辑就如此的麻烦与复杂。这种对象之间的相互关联与我们的高复用,低耦合思想是不符合的。并且UI控件的增加,UI控件之间势必需要相互了解及操作,情况就会变得越来越难以控制,最终整个程序变得难以复用与维护!
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &通知中心NSNotificationCenter & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
iOS开发中的通知中心(NSNotificationCenter)机制解决以上的问题!在其他的开发应该也存在相类似的处理机制,这种处理机制的设计模式被称为中介者模式!
每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信。
任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么。其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知!
360软件小助手截图23
一个对象要想接收到通知,必须先在通知中心进行注册。这一点与我们生活中的新闻订阅是相同的!
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &注册通知监听器 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
通知中心(NSNotificationCenter)提供了方法来注册一个监听通知的监听器(Observer)&
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anO
//observer:监听器,即谁要接收这个通知
//aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入
//aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知
//anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知
&- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))
//name:通知的名称
//obj:通知发布者
//block:收到对应的通知时,会回调这个
//blockqueue:决定了block在哪个操作队列中执行,如果传nil,默认在当前操作队列中同步执行
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &通知 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
一个完整的通知一般包含3个属性:&
& & &- (NSString *) // 通知的名称&
& & &- (id) // 通知发布者(是谁要发布通知)&
& & &- (NSDictionary *)userI // 一些额外的信息(通知发布者传递给通知接收者的信息内容)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 初始化一个通知(NSNotification)对象 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anO
& &+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserI
& &- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userI
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 发布通知 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
通知中心(NSNotificationCenter)提供了相应的方法来帮助发布通知
发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等
- (void)postNotification:(NSNotification *)
发布一个名称为aName的通知,anObject为这个通知的发布者
- (void)postNotificationName:(NSString *)aName object:(id)anO
发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserI
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'iOS 本地通知NSNotificationcenter --- iOS 开发
iOS 有一种叫做通知的产生时间的功能.可以在一定的条件下处罚响应事件.通过nsnotificationcenter 获取通知对象,注册并且使用通知.面向对象的设计思想是把行为方法封装在一个对象中,以用来增加代码的复用性.这是这种分散的分装,增加了对象之间的相互关联,总是有很多的对象需要彼此的礼教以及相互操作.
一个简单的例子说明这种交互产生的对象之间的相互依赖:
有一个列表框,没当列表框的某一项被选中时会弹出一个对话框,对话框包含一个或者多个输入框,在输入完毕输入的文字要更新要再列表中显示,文字描述有点啰嗦.大家可以以qq微新好友列表为参考.
只是这几个ui空间之间交互逻辑九如此的麻烦与复杂.这种对象之间的相互关联与我们有的高度复用,高内聚低耦合的思想是不相符合的.并且ui控件之间势必需要相互了解操作.情况九回变得越来越难以控制.最终使得整个程序变得那一复用与维护.
通过通知中心:NSNotificationCenter可以很简单的解觉这个问题.在其他的开发中也回用相同的问题,这种处理机制的设计模式被称作为中介模式.每一个应用程序中都有一个通知中心的实例,专门负责协助不同对象之间的消息通知.任何一个对象都可以向通知中线发送通知(NSNOtification),描述自己在左什么.其他感兴趣的对象(observer)可以接受到通知,发生相应的变化.
通知中心nsnotificationcenter提供了方法来注册一个监听器(observer)
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anO
//observer :监听器,即谁要接受这个通知
aselector 收到通知后,回调监听器的这个方法,并把通知对象当做单参数出入
aname 通知的名称,若果为nil 那么无论通知名称是什么,监听器都能够收到这个通知
//anObjict : 通知发布者.如果为ANObjiect 和ANAMEWI 都为nil,监听器都收到所以的通知
&- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))
//name 通知的名称
// obj: 通知的发布者
//block 收到对应的通知是,会回调这个
//blockqueue 决定了block 子那个操作队列中执行.日过传nil.默认在当前的操作队列中同步执行通知
一个完整的通知一般包含三个属性
-(nsstring *)name //通知的名称
- (id)objict //发布者(是谁要发布)
-(nsdictionary)userinfo //一些额外的信息(通过发布者传递接受者的信息内容)
初始化一个(Nsnotification)对象
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anO
& &+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserI
& &- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInf
发布一个notification通知,可在notification对象中设置通知的名称、通知发布者、额外信息等
- (void)postNotification:(NSNotification *)
发布一个名称为aName的通知,anObject为这个通知的发布者
- (void)postNotificationName:(NSString *)aName object:(id)anO
发布一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserI
一下以一个例子威力:
uiapplocation * application = [uiapplication sharedapplicaton];
[[NSNotificationCenter&defaultCenter]&addObserver:self selector:@selector(applicationWillResignActive:)name:UIApplicationWillResignActiveNotification&object:application];
以上代码注册了一个通知,addObserver是接收通知的对象,通常为self,selector是接收到通知后要执行的操作,可以理解为操作事件,name是通知的名称,这里使用的是UIApplicationWillResignActiveNotification,意思是应用程序将要进入后台之前,object限定只接收来自哪些对象的通知,通常设为nil,你也可以写某些方法,让这个感兴趣的观察者执行某些方法.
-(void)applicationWillResignActive:(NSNotification *)notification & //注: 这个方法可以写其他很多的响应方法(根据你自己的需求)
在上面这个方法中实现响应的操作就可以了。
这个过程就是当应用程序将要进入后台前(按下Home键)触发通知,然后执行applicationWillResignActive:notification方法完成一些操作。
这个例子大家也许没有明白通知的注册过程,下面一个例子大家好好看哦:
appdelegata.m 中
- (BOOL)application:(UIApplication&*)application didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions
& &&// Override point for customization after application launch.
& &&self.window&= [[UIWindow&alloc]&initWithFrame:[[UIScreen&mainScreen]&bounds]];
& & [[NSNotificationCenter&defaultCenter]&addObserver:&self
&& & & & & & & & & & & & & & & & & & & & & &&selector:&@selector(callBack)
&& & & & & & & & & & & & & & & & & & & & & & & &&name:&@&aa&
&& & & & & & & & & & & & & & & & & & & & & & &&object:&nil];
& &&ViewController&* view = [[ViewController&alloc]init];
& &&self.window.rootViewController&=
& &&self.window.backgroundColor&= [UIColor&whiteColor];
& & [self.window&makeKeyAndVisible];
& &&return&YES;
- (void)callBack{
& &&NSLog(@&this is Notification.&);
viewconterllor中
- (BOOL)application:(UIApplication&*)application didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions
& &&// Override point for customization after application launch.
& &&self.window&= [[UIWindow&alloc]&initWithFrame:[[UIScreen&mainScreen]&bounds]];
& & [[NSNotificationCenter&defaultCenter]&addObserver:&self
&& & & & & & & & & & & & & & & & & & & & & &&selector:&@selector(callBack)
&& & & & & & & & & & & & & & & & & & & & & & & &&name:&@&aa&
&& & & & & & & & & & & & & & & & & & & & & & &&object:&nil];
& &&ViewController&* view = [[ViewController&alloc]init];
& &&self.window.rootViewController&=
& &&self.window.backgroundColor&= [UIColor&whiteColor];
& & [self.window&makeKeyAndVisible];
& &&return&YES;
- (void)callBack{
& &&NSLog(@&this is Notification.&);
- (void)viewDidLoad
& & [super viewDidLoad];
& & UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
& & button.backgroundColor = [UIColor redColor];
& & [button addTarget:self action:@selector(getNotofocation) forControlEvents:UIControlEventTouchUpInside];
& & [self.view addSubview:button];
// Do any additional setup after loading the view, typically from a nib.
- (void)getNotofocation{
& & NSLog(@&get it.&);
& & //发出通知
& & [[NSNotificationCenter defaultCenter] postNotificationName:@&aa&object:self];
- (BOOL)application:(UIApplication&*)application didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions
& &&// Override point for customization after application launch.
& &&self.window&= [[UIWindow&alloc]&initWithFrame:[[UIScreen&mainScreen]&bounds]];
& & [[NSNotificationCenter&defaultCenter]&addObserver:&self
&& & & & & & & & & & & & & & & & & & & & & &&selector:&@selector(callBack)
&& & & & & & & & & & & & & & & & & & & & & & & &&name:&@&aa&
&& & & & & & & & & & & & & & & & & & & & & & &&object:&nil];
& &&ViewController&* view = [[ViewController&alloc]init];
& &&self.window.rootViewController&=
& &&self.window.backgroundColor&= [UIColor&whiteColor];
& & [self.window&makeKeyAndVisible];
& &&return&YES;
- (void)callBack{
& &&NSLog(@&this is Notification.&);
版权声明:本文为博主原创文章,未经博主允许不得转载。
本分类共有文章78篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";
/*爱悠闲底部960*75*/
var cpro_id = "u1888128";你的位置: >
> iOS开发中NSNotificationCenter通知参数的意义
对象之间进行通信最基本的方式就是消息传递,在Cocoa中提供Notification Center机制来完成这一任务。其主要作用就是负责在任意两个对象之间进行通信。使用方法很简单,如下几个步骤即可:
假设A与B之间进行通信,B来触发事件,A接受该事件,并作出响应。
1) A编写自定义的消息响应函数update
2) A向消息中心注册,[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@"update" object:nil]
参数说明:通知中心接收到名为update的通知后,向注册监听的对象(此处是self)发送消息,调用update方法,object是消息传递的数据
3) B触发事件[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]
参数说明:向通知中心发送名为“update”的通知,object是携带的数据
每一个进程都有一个默认的NSNotificationCenter,可以通过类方法defaultCenter获取该消息中心的实例。消息中心可以处理同一进程中不同对象之间的消息。如果要在同一台机器上进行进程间的通信,需要使用NSDistributedNotificationCenter。
消息中心以同步的方式将消息分发到所有的观察者中,换言之,直到所有的观察者都收到消息并处理完毕以后,控制权才会回到调用者的手里。如果需要异步的处理消息,需要使用通知队列NSNotificationQueue。
在多线程程序中,通知会被分发到每一个发起消息的线程中,这可能与观察者注册时所在的线程已经不是同一线程
转载请注明: &
与本文相关的文章6976人阅读
& & & 最近在做的一个ios的项目上面用到了ios的NSNotificationCenter,却发现会重复收到一个通知多次,很是奇怪。
& & & 首先:确定发送通知的地方只发送了一次,[[NSNotificationCenterdefaultCenter]
postNotificationName:[CustomClass&&getStatusConnected]object:nil]
& & & NSLog显示的也是发送了一次
& & & 剩下只有排查注册通知的地方了,看是否注册了多次,注册通知的地方是在一个函数里面,一共注册了三个通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(statusShow:)
name:[CustomClass statusConnected]
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(statusShow:)
name:[CustomClass statusDisconnect]
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusShow:)
name:[CustomClass statusLogout]
object:nil];
NSLog显示也只有一次,悲剧了。。。。。。
//通知处理函数
-(void)statusShow:(NSNotification *)notification
& & & &网上百到个类似的帖子,
& & & &对比而言,我的在uiviewcontroller中注册,没有这种情况,那到底是为什么呢,在对消息处理函数statusShow中NSLog,确实是收到多个,而且是3个,为什么呢?
& & & 后来脑子一闪,想到为什么是3个呢,跟注册3个通知有关系么?尝试把后面两个注册的通知取消,我去,只收到一个了,不应该呀,继续找原因,查到是3个name的原因,仔细看了下上下文代码,三个通知的name是由CustomClass提供的全局静态的名称,而注册通知的函数在CustomClass初始化之前调用了,导致三个name都为空,因此-(void)statusShow:(NSNotification&*)notification会收到很多notification,3次也不一定,可能也会有多次。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17223次
排名:千里之外
(1)(3)(5)(2)(1)

我要回帖

更多关于 系统未开启邮件发送 的文章

 

随机推荐