【QQ界面展示-通知的发布和监听 Objective-C语言】

这篇具有很好参考价值的文章主要介绍了【QQ界面展示-通知的发布和监听 Objective-C语言】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、来,看看,我们先给大家介绍一下通知

1.那么,这个通知,我们就是要给大家介绍三个东西

1)一个是通知的发布:如何发布通知

2)一个是通知的监听:发布以后,如何监听通知

3)一个是通知的移除:注意,通知一定要怎么样,最后,移除,

【QQ界面展示-通知的发布和监听 Objective-C语言】

2.当你监听了一个通知以后,当你这个对象没有的时候,一定要把它移出一下,这个通知,否则就会有,野指针错误了,

类似于野指针错误了,空对象错误,

所以说,我们,要学习就是通知的发布、通知的监听、通知的移除、

就这么三点,

当我介绍完以后,如果这三点你都不会,我就白介绍了,

如果都会了,那就够了,

3.通知的发布

【QQ界面展示-通知的发布和监听 Objective-C语言】

好,那么,在介绍之前,告诉大家,

我们这个通知里面,有这么两个对象,需要注意的,一个叫做

1)NSNotificationCenter

2)NSNotification

那么,这两个对象,是干什么的,

无论你是发布通知,还是监听通知,都必须通过谁来实现,

NSNotificationCenter

【QQ界面展示-通知的发布和监听 Objective-C语言】

无论你是发布通知,还是监听通知,都必须通过NSNotificationCenter,来实现,

每次你发布的一条儿通知,就是一个什么对象呢,

就是一个NSNotification,这么一个对象,

【QQ界面展示-通知的发布和监听 Objective-C语言】

每次发布的一条儿通知,就是一个NSNotification,这么一个对象,

所以说,现在有两个对象,

有两个类,你得搞明白,

1)当你要发布通知的时候,或者说,当你要监听通知的时候,你得首先拿到哪个类的对象,

NSNotificationCenter,这个对象啊,

2)注意,你每次发布的一个通知,这个通知里面,会包含好多信息,

包括通知的名称,

包括通知的内容,

等等,

会包含这些信息,这些信息,都会封装到一个什么对象里面来保存呢,

都会封装到一个NSNotification,对象,所以说,一个NSNotification,对象,就表示一个通知的一些信息啊,

那么,每一个通知,就是一个NSNotification,

十个通知,就得有几个,十个NSNotification,

所以说,上面这个对象,是用来发布和监听通知的,

下边这个对象,是用来封装一个通知的,

【QQ界面展示-通知的发布和监听 Objective-C语言】

OK,就是这么两个东西,

好,这是我们关于这两个类,要搞明白,

等会儿,我们主要就是学习,这两个对象,怎么来去用它,

二、通知中心

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

先给大家来看一下这幅图,

好,注意,现在呢,这里有一幅图,这幅图里面呢,

有这么几个部分,

1)第一个,是红色框框,框住的这个

【QQ界面展示-通知的发布和监听 Objective-C语言】

这个里面是发布通知的对象,

这个对象A,是用来发布通知的,这里有一个NSNotification,

两个NSNotification,

三个NSNotification,

表示这个A对象,发布了几个通知啊,三个通知吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

1)第一个通知的名字,是不是在这个name里面,第一个通知的名字叫@“通知1”

2)第二个通知的名字,叫@“通知2”

3)第三个通知的名字,叫@“通知3”

【QQ界面展示-通知的发布和监听 Objective-C语言】

这是A对象,发布了三个通知,

2)然后,这个绿色框框,框住的这个对象,

【QQ界面展示-通知的发布和监听 Objective-C语言】

对象B,它是用来监听通知的,

它是用来监听通知的,

注意,这个对象B里面的,M1方法,监听了A对象发布的第一个通知,@“通知1”,

【QQ界面展示-通知的发布和监听 Objective-C语言】

同时,是不是也监听了A对象发布的第二个通知,@“通知2”,啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

就是说,对象B里面,的M1方法,监听了A对象发布的通知1、和通知2

3)然后,对象B里面的M2方法,监听了对象A里面的通知1、和通知3

【QQ界面展示-通知的发布和监听 Objective-C语言】

4)对象B里面的M3方法,它只是监听了A对象里面的第3个通知、通知3,啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

也就是说,现在,我们A,某个对象,可以发布很多个通知,

另外一个对象,是不是也可以监听很多个通知吧,

同时,一个方法,可以监听一个通知,

一个方法,是不是也可以监听多个通知吧,

一个通知,可以被一个方法监听,

一个通知,也可以被多个方法监听,

明白我的意思吧,就像广播一样,

当然,在我们国家,因为有法律规定,不是说人人都能开一个广播电台的吧,但是实际上,技术上,每个人是不是都可以发布自己的一个广播电台,

只要你买个收音机,是不是别人就可以监听它那个、接收它的广播信号吧,

然后你发广播的时候,你需要关心将来有多少人收听吗,

你发广播的时候,你只是发出去了,你知道有多少人收听吗,

根本不知道,你只要把它发出去,那么,别人收听的时候,它收听的时候,清楚不清楚、能不能收到,是不是你不管啊,

你要做的只是,把这个广播发出去,然后呢,谁想听,自己拿收音机收我的台就OK了吧,

通知和这个有点儿像,

通知,就是A对象,只管发通知,你想发几个通知就发几个通知,

发完以后,别人到底监听不监听你这个通知,A对象需要管吗,

A对象根本不关心,

也就是说,很多通知,A对象发了以后,是没有人监听的,

这样是没有错的,

明白吧,你谁想监听你就监听,不想监听你就别监听,

反正我发通知的人,我一定会发,明白,我一定会发,就是这个意思,

好,接下来,就是需要:

1)用一个对象来发通知

2)用一个对象来监听通知

那么注意,发通知,得用哪个对象,NSNotificationCenter吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

得用NSNotificationCenter来发布通知,

那么这个通知,是谁发布的呢,是这个A对象发布的,

注意,我们是用,NSNotificationCenter这个对象来发通知,

【QQ界面展示-通知的发布和监听 Objective-C语言】

那么,用它来发通知,但是,这个通知是哪个对象要发布的呢,是不是上面这个A对象要发布的啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

这个A对象,要发布一个通知,用谁来发布,得用下面这个NSNotificationCenter,得用这个Center对象来发布,

监听的时候,也是B对象要监听,通过什么来监听呢,通过NSNotificationCenter,这个对象来实现监听吧,

是这么一个意思,

【QQ界面展示-通知的发布和监听 Objective-C语言】

二、接下来,我们就给大家模拟一下,这个发通知、和监听通知,

1.新建一个项目,

【QQ界面展示-通知的发布和监听 Objective-C语言】

点击File-New-Project,

【QQ界面展示-通知的发布和监听 Objective-C语言】

选择OS X系统-Application-Command Line Tool-点击Next,

【QQ界面展示-通知的发布和监听 Objective-C语言】

起个名字:003通知的发布与监听,

【QQ界面展示-通知的发布和监听 Objective-C语言】

新建这么一个只有一个main文件的这么一个项目,

【QQ界面展示-通知的发布和监听 Objective-C语言】

好,这里我新建两个类,

【QQ界面展示-通知的发布和监听 Objective-C语言】

右键-NewFile-新建两个类,

1)第一个类呢,

【QQ界面展示-通知的发布和监听 Objective-C语言】

叫什么类啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

第一个类呢,叫我们的:NotificationSender,类,

通知的发布者,通知发送者,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

复制一下这句话,拷贝到.m文件里,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//通知的发布者,

2)再来一个通知的监听者,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

来一个什么名字呢:NSNotificationListener,监听的意思,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

好,这是我们这儿说的这么一个东西,

2.然后呢,通知的发布者,在这里面,给它加一个属性吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

这个属性,就是name,表示这个通知的发布者,它叫啥,

【QQ界面展示-通知的发布和监听 Objective-C语言】

然后呢,这个通知的监听者,也给它来个name吧,这个表示通知监听者的名称,

好,现在是不是有一个监听的通知者、和一个发布者了,

好,接下来,我们就打开这个主函数,

【QQ界面展示-通知的发布和监听 Objective-C语言】

尝试来写一个通知发布、和监听,

是不是肯定要用到那两个类,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

#import “No……,哎,怎么只有一个呢,

【QQ界面展示-通知的发布和监听 Objective-C语言】

靠,我前边为什么要加个NS呢,是不是我前边在这个类型加了个NS吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

但是不应该加吧,但是加上,是不是也没啥错吧,

但是最好别加,因为NS,是不是人家系统的类型啊,

行,删了,删了就删了吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

哎,不删了,就这样吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

OK,现在是不是这两个就都有了,

3.我们首先创建一个什么,

//创建一个通知的发布者

//创建一个通知的监听者

【QQ界面展示-通知的发布和监听 Objective-C语言】

1)//怎么写,发布者,

【QQ界面展示-通知的发布和监听 Objective-C语言】

NotificationSender *sender1 = [[NotificationSender alloc] init];

【QQ界面展示-通知的发布和监听 Objective-C语言】

//好,是不是有一个通知的一个发布者了,

2)好,再来一个监听者,

【QQ界面展示-通知的发布和监听 Objective-C语言】

NSNotificationListener *listener1 = [[NSNotificationListener alloc] init];

//然后,接下来,我们干什么,先来

3)让sender1对象发布一个通知

注意听,我要让这个对象发布一个通知,

【QQ界面展示-通知的发布和监听 Objective-C语言】

既然发布通知,无论是发、还是接,都得拿到哪个对象,才能发布、还是接,

NSNotificationCenter,吧,

得拿到这个Center对象,才能进行发、接,

所以说,你这里要发一个通知,就得先获取干什么,先干什么,

//先获取NSNotificationCenter对象

//是不是拿到这个对象,才能进行发通知、或者监听通知吧,

//怎么获取这个对象

【QQ界面展示-通知的发布和监听 Objective-C语言】

NSNotificationCenter *center

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

NSNotificationCenter *notificationCenter =

【QQ界面展示-通知的发布和监听 Objective-C语言】

//等于什么呢,等于NSNotificationCenter,

//里面有一个方法,叫做default……

【QQ界面展示-通知的发布和监听 Objective-C语言】

//叫做defaultCenter

【QQ界面展示-通知的发布和监听 Objective-C语言】

//默认有一个叫defaultCenter,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//这就是一个类方法,

//也就是说,这个发通知、和接通知,这个对象,这个对象一直就、这个对象是不是一直存在于我们的应用程序里面,

//我们要做的只是,拿到这个对象,就可以了,明白吧,不需要我们创建,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//拿到这个对象,就OK了,

//拿到它以后,要通过这个对象进行发通知、或者说是监听通知,

//我们要用它、要通过它发布一个通知

//通过NSNotificationCenter发布一个通知

【QQ界面展示-通知的发布和监听 Objective-C语言】

//注意,通过这个Center对象,发布一个通知,需要调一个方法,来,注意看,我们的PPT里面,我给大家把这几个方法,列出来了,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

是这里,来,注意看,

当你需要通过这个对象,发布一个通知的时候,非常简单,只要调它的这个postNotification,

【QQ界面展示-通知的发布和监听 Objective-C语言】

调这个PostNotification方法,

或者是PostNotificationName方法

【QQ界面展示-通知的发布和监听 Objective-C语言】

或者是postNotificationName:userInfo:方法

调这三个方法,都可以,

这三个方法,其实意思是一样的,来,注意看,给大家就是,看一下,

这个可能文字比较挤,看不清楚,我在这里看,

【QQ界面展示-通知的发布和监听 Objective-C语言】

注意,我们是不是首先知道,它肯定是要调、要发送通知、肯定是要调一个post什么什么方法啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

来,看看,

notificationCenter post……

【QQ界面展示-通知的发布和监听 Objective-C语言】

来个postNotification,注意,这里有这三个方法,

这三个方法,其实可以理解为是一个方法,

【QQ界面展示-通知的发布和监听 Objective-C语言】

1)当你发布一个通知的时候,你可以通过传一个封装好的NSNotification对象,可以事先先封装好一个NSNotification对象,然后把这个对象直接传进来,这样的话,就会把你这个通知对象,给你发出去,

【QQ界面展示-通知的发布和监听 Objective-C语言】

2)或者说,你可以调第二个方法,当调这个postNotification方法的时候,它根据你现场传过来的这两个参数,内部给你构建一个NSNotification对象

【QQ界面展示-通知的发布和监听 Objective-C语言】

3)第三个也是,你在调这个方法的时候,给它传一个:

1— 通知的名称

2— 传一个是哪个对象发的通知

3— 传一个通知的具体数据

然后在这个方法内部,它会根据这三个值,创建一个NSNotification对象,

也就是说,这三个方法,都是用来发布通知的,

只不过,

1)第一个方法是,你得事先先封装好一个通知对象,

然后传过来,我帮你发,

2)第三个方法是,你不需要事先封装,只要把通知对象里面的数据,给我传给这三个参数,我在这个postNotification方法内部,是不是帮你封装这个通知对象啊,

那么这个时候,我请问大家,如果是你的话,你会调第一个、第二个、还是第三个,

如果是我的话,我会调第三个,为什么,

第一个是不是还得手动封装,多费劲啊,

第三个是不是写完以后,内部自动封装了啊,

但是,有时候,你现在就有一个现成的通知对象,

这个时候,调第一个是不是很方便,

所以说,在不同的情况下,有不同的方法,

我们现在,今天主要用第三个,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

1)参数一:表示通知的名称

【QQ界面展示-通知的发布和监听 Objective-C语言】

2)参数二:第二个这个对象,表示的是,这个NSNotificationCenter,这个对象,要帮你发一个通知,但是这个通知是哪个对象发的呢,我们是不是要用这个sender1这个对象发,所以,第二个参数,就传一个sender1,

【QQ界面展示-通知的发布和监听 Objective-C语言】

3)参数三:第三个参数,是这个通知的一个具体的内容,

这是一个键值对儿吧,NSDictionary,这儿既然是个键值对儿,所以说,这个通知的内容,你想怎么写,就怎么写,想怎么写,就怎么写,

想怎么写,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

最近有什么重大的新闻,

两会是吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

这是值吧,

我们是不是先得给它来个键,

键,随便起吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

随便起,

【QQ界面展示-通知的发布和监听 Objective-C语言】

title,是不是这个,

[notificationCenter postNotificationName:@“tzname1” object:sender1 userInfo:@{@“title”:@“两会Duang开始了”}];

【QQ界面展示-通知的发布和监听 Objective-C语言】

2)再来个内容,

@“content”:内容是什么,

【QQ界面展示-通知的发布和监听 Objective-C语言】

@“content”:@”成龙的头发少了“

【QQ界面展示-通知的发布和监听 Objective-C语言】

假设这就是一个通知,这个通知里面,只有这两个内容,

【QQ界面展示-通知的发布和监听 Objective-C语言】

OK,现在这是不是就是一个通知,

这,就是一个啥,

这是不是就是发布了一个通知啊,

注意,这就是发布了一个通知,

4.那么,是不是要监听这个通知啊,

来,注意听,

监听通知,必须放到发布通知之前,

监听,必须放到发布通知之前,

得先监听、再发布、然后才起作用,

如果它已经发布了,再监听,就晚了,

【QQ界面展示-通知的发布和监听 Objective-C语言】

因为你先监听了以后,这个通知对象,就知道,哦,你要监听,我发的时候,我给你发一份儿啊,

就好比,定牛奶,你得先定,才会给你送家吧,那人家送过来了,你说我定一下,你做梦呢吧,

一定要先定,才会给你送到家,

这里也是,要先监听,然后再发布,你才能接收,

所以,下面是发布通知,上面是监听通知,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//监听一个通知,我们知道用这个listener1,这个对象来监听,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//但是,我们打开看一下这个listener1,里面,有任何方法吗,没有,我们给它写一个,

//监听通知的时候,必须是使用某个对象的方法来监听吧,

//监听通知的时候,必须使用某个对象的方法来监听,

//因为只有方法,当通知发送的时候,才会被执行,

//所以,一定要先写个方法,

//编写一个方法,这个方法用来监听通知,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//叫什么,随便写,m1,可不可以,m1方法,

- (void)m1;

【QQ界面展示-通知的发布和监听 Objective-C语言】

在NSNotificationListener.m文件里,把这个方法实现以下,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//我们这里是不是,只要m1方法一被调用,是不是duang,就出来了,

//现在这个监听通知者,里面是不是有一个m1方法了,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//然后,我们在这个主函数中,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//用这个listener1的m1方法,监听一下这个通知,

//注意,怎么监听,是不是也要用这个Center对象啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//是不是也要用这个notificationCenter,来监听,

//所以说,我们可以先把这个对象,怎么样,挪到前面去吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//选中这句话,command + X,是不是写到最上面啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//因为无论发布通知,还是监听通知,都要用到它,所以,先把它写到上面,

//监听,怎么来监听,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//notificationCenter,里面有一个方法,叫做add

【QQ界面展示-通知的发布和监听 Objective-C语言】

//我们说,你监听这个通知,相当于你一直观察这个通知,

//只要它一通知,是不是就立刻去做一件事儿啊,

//所以说,你监听的意思,其实就是增加一个观察者,

//我们在这里,就是用这个什么,就是我们这个addObserver:(id)

//注意,不是上面这个,

【QQ界面展示-通知的发布和监听 Objective-C语言】

//这个是KVO什么东西,不用管它,用这个

notificationCenter addObserver:(id) selector:(SEL) name:(NSString *) object:(id)

【QQ界面展示-通知的发布和监听 Objective-C语言】

//注意,这个里边有这么几个参数,

1)参数一:第一个参数是,哪个对象要监听这个通知,

哪个对象,listener1吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

2)参数二:第二个参数,这个对象的哪个方法,要监听这个通知,是不是m1方法吧,

@selector(m1)

【QQ界面展示-通知的发布和监听 Objective-C语言】

3)参数三:第三个参数,是什么东西呢,就是说,增加的这个监听,是让这个对象(listener1)的这个方法(m1)监听,这个第三个参数,是通知的名字,我们这儿是不是只发布了一个通知,通知的名字,是不是叫这个,@“tzname1”

【QQ界面展示-通知的发布和监听 Objective-C语言】

第三个参数,是要监听的通知的名字,

【QQ界面展示-通知的发布和监听 Objective-C语言】

4)参数四:第四个参数,是,这个通知名字,是哪个对象发布的这个通知啊,

是sender1,这个对象吧,对,是sender1,

【QQ界面展示-通知的发布和监听 Objective-C语言】

拷过来,

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

这就是,监听一个通知,

来,把参数写一下,

1)参数1:要监听通知的对象

2)参数2:该对象的哪个方法用来监听这个通知

3)参数3:被监听的通知的名称

4)参数4:发布通知的对象

下面这个发布通知的参数,写一下,

【QQ界面展示-通知的发布和监听 Objective-C语言】

1)参数1:通知名称

2)参数2:通知发布者(发布通知的对象)

有人说,发布通知的对象,不是这个吗,(notificationCenter)

【QQ界面展示-通知的发布和监听 Objective-C语言】

不是这个,它只是一个工具而已,它只是一个工具而已,

是不是这个工具,为这个对象(sender1)来发布通知,

【QQ界面展示-通知的发布和监听 Objective-C语言】

3)参数3:通知的具体内容

这就是我们的这个

1)首先,创建一个通知的发布者

2)创建一个通知的监听者

【QQ界面展示-通知的发布和监听 Objective-C语言】
【QQ界面展示-通知的发布和监听 Objective-C语言】

3)因为我们要发布通知、或者是监听通知,所以说,首先得创建一个NSNotificationCenter对象,

【QQ界面展示-通知的发布和监听 Objective-C语言】

4)然后,一定要先监听通知

5)再,发布通知

6)然后,还有一个步骤,要移除这个通知,什么时候移除呢,我们等会儿再说,

来,先给大家,把这个运行一下,

【QQ界面展示-通知的发布和监听 Objective-C语言】

来,来,咱们看一下,它管用不管用,这里,设个断点,

【QQ界面展示-通知的发布和监听 Objective-C语言】

现在我们一步一步走,

1)走一步,是不是创建了一个通知发布者

【QQ界面展示-通知的发布和监听 Objective-C语言】

2)是不是又创建了一个通知监听者

3)是不是创建了一个NSNotificationCenter,那个对象吧,

4)然后,是不是要增加一个监听,

【QQ界面展示-通知的发布和监听 Objective-C语言】

让listener1的m1方法,监听这个通知,@“tzname1”,监听这个对象(sender1)发布的@“tzname1”通知吧,

所以说,这句话,完整的说,应该是,让listener1这个对象的m1方法,监听sender1,这个对象发布的@“tzname1”,这个通知,

5)再走一步,监听完毕之后,只要这个通知一发布,这里是不是立刻就应该监听的到,

【QQ界面展示-通知的发布和监听 Objective-C语言】

这里一监听的到,意味着这个m1方法,立刻就被执行了,

咱们看看是吗,

【QQ界面展示-通知的发布和监听 Objective-C语言】

通知一发布,监听通知的方法,立刻被执行,是不是,

这是不是就是通知的监听者啊,

也就是说,其实,大家想想,这是什么意思,其实是,只要这个通知一发布,那么这个时候,它就会调用通知监听者的m1方法,

【QQ界面展示-通知的发布和监听 Objective-C语言】

是不是直接调这个对象(listener1)的这个方法(m1)啊,

既然是这样,那么假如说,有一天,listener1,这个对象作废了,这个对象废掉了,这个对象释放了,

一开始,listener1,这个对象,是不是监听我们这个通知,

然后呢,当这个listener1,这个对象被销毁以后,这个对象(listener1)就被销毁了,

这个对象被销毁以后,是不是通知还有可能被发布吧,

当这个对象被销毁以后,如果你一发这个通知,它依然会去调用listener1,对象的这个m1方法,

这个时候,listener1,这个对象被销毁了,调一个已经被销毁了的对象的m1方法,显然就,野指针错误了吧,

是不是僵尸对象了吧,

所以说,为了避免这个问题,

当这个listener1,监听了这个通知以后,一定要在listener1,被销毁的时候,再把这个通知给它移除掉,

明白为什么要移除通知了吗,

因为如果你不移除的话,这个时候,一旦这个监听通知的对象,被销毁了,通知一发布,依然会调它的那个方法,就会发生野指针错误,

所以说,就得移除,

既然我们知道为什么了,你能告诉我应该在什么地方,去移除这个通知吗,

是不是在listener1这个对象被销毁的时候,会在它即将被销毁的时候,移除这个通知啊,

哪个方法预示着这个对象即将被销毁了,

只要这个方法一被执行,对象就被销毁了,

哪个方法,

对,就是我们这个类的一个dealloc方法,

来,找到我们这个listener,

它里面是不是有一个dealloc方法吧,

【QQ界面展示-通知的发布和监听 Objective-C语言】

它里面,是不是有一个叫做dealloc方法,

【QQ界面展示-通知的发布和监听 Objective-C语言】

在这个方法当中,注意看,

- (void)dealloc{

//移除通知

//怎么移除,你监听通知、发布通知、移除通知,都得用谁,

【QQ界面展示-通知的发布和监听 Objective-C语言】

[NSNotificationCenter defaultCenter];

【QQ界面展示-通知的发布和监听 Objective-C语言】

是不是都得用这个Center啊,

然后,怎么移除,remove

【QQ界面展示-通知的发布和监听 Objective-C语言】

removeObserver,

【QQ界面展示-通知的发布和监听 Objective-C语言】

把谁移除掉,把self,

【QQ界面展示-通知的发布和监听 Objective-C语言】

当前,这个监听对象,自己,它是不是,它要通过这个对象的m1方法,监听一个通知啊,

你移除的时候,就是把当前对象自己移除掉,我再也不监听你了,马上就挂了,

在挂之前,咱俩先解除关系啊,

就是这么个意思,这就是我们移除通知,

啥,super,能调吗,

[super dealloc];

【QQ界面展示-通知的发布和监听 Objective-C语言】

command + B,

【QQ界面展示-通知的发布和监听 Objective-C语言】

Build Failed,什么,

ARC forbids explicit message send of ‘dealloc’

ARC禁止显示的发布这个消息给父类,

ARC是不是不能调,

MRC是不是才能调啊,

【QQ界面展示-通知的发布和监听 Objective-C语言】文章来源地址https://www.toymoban.com/news/detail-488155.html

删掉这句话,[super dealloc];

好,那么接下来,这就是我们这个通知的一个简单的一个

1)监听

2)发布

好,大家休息一下,

到了这里,关于【QQ界面展示-通知的发布和监听 Objective-C语言】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一章 熟悉Objective-C

    Objective—C语言是由Smalltalk演化而来,后者是消息型语言的鼻祖,所以该语言使用的“消息结构”而非“函数调用”。 1. 消息和函数调用之间的区别 关键区别在于: 使用消息结构的语言,其运行所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。

    2024年01月18日
    浏览(39)
  • Effective Objective-C 学习(三)

    Objective-C 使用引用计数来管理内存:每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数。计数变为 0时,就可以把它销毁。 在ARC中,所有与引用计数有关的方法都无法编译(由于 ARC 会在编译时自动插入

    2024年02月22日
    浏览(46)
  • Effective Objective-C 学习(二)

    “属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。Objective-C 对象通常会把其所需的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法”(setter)用于写入变量值。开发者可以令

    2024年02月20日
    浏览(46)
  • use gnustep objective-c

    专注于概念,而不是迷失在语言技术细节中 编程语言的目的是成为一个更好的程序员; 也就是说,在设计和实现新系统以及维护旧系统方面变得更加有效 header preprocess interface implementation method variable declare and expression comment basic integer set and float set enum type void type derive type incl

    2024年02月14日
    浏览(41)
  • Effective Objective-C 学习(四)

    在执行后台任务时,GCD 并不一定是最佳方式。还有一种技术叫做 NSOperationQueue,它虽然与 GCD 不同,但是却与之相关,开发者可以把操作以 NSOperation 子类的形式放在队列中,而这些操作也能够并发执行。 GCD是纯C的API,而NSOperationQueue是Objective-C的对象。这意味着使用GCD时,任

    2024年02月19日
    浏览(38)
  • 【KVC补充 Objective-C语言】

    2024年02月15日
    浏览(39)
  • Objective-C日期NSDate使用

    2024年01月21日
    浏览(46)
  • Objective-C获取变量类型的方法

    在Objective-C中,要获取一个对象的类型,可以使用[object class]方法。这将返回一个Class对象,表示该对象的类型。 另外,typeid是C++中的,用于获取一个变量的类型信息。在Objective-C中,typeid并不适用于获取对象类型。相反,您应该使用[object class]方法来获取对象的类型。

    2024年02月13日
    浏览(42)
  • Effective Objective-C 学习第二周

    “属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。Objective-C 对象通常会把其所需的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(getter)用于读取变量值,而“设置方法”(setter)用于写入变量值。开发者可以令

    2024年01月22日
    浏览(45)
  • Effective Objective-C学习第一周

    OC是一种消息型语言,使用的是“消息结构”而非“函数调用”,由smalltalk演化而来。使用消息结构的语言运行时执行的代码由运行环境来决定,而使用函数调用的语言由编译器决定。 OC将堆内存管理抽象出来了。不需要使用malloc或者free来分配或释放对象所占的内存。OC运行

    2024年01月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包