首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNotificationCenter多次调用

NSNotificationCenter多次调用
EN

Stack Overflow用户
提问于 2015-04-20 09:23:25
回答 2查看 1.8K关注 0票数 7

我在我的应用程序中实现了NSNotificationCenter。当图像解码完成时,我会发送通知。当图像解码第一次执行8 times.So时,假定发送8 times.But的通知将被调用64次(8*8)。

下面是我的代码如何实现-> //初始化

代码语言:javascript
复制
- (id)initWithFrame:(CGRect)frame
{
  self = [super initWithFrame:frame];
 if (self) {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                                      selector:@selector(getHRImage:)
                                                             name:@"DecodeComplete" object:nil];}   

//调用方法

代码语言:javascript
复制
 -(void)getHRImage:(NSNotification *) notification
{

if ([[notification name] isEqualToString:@"DecodeComplete"])
    NSLog (@"Successfully received the DecodeComplete notification! ");
}`

//取消分配

代码语言:javascript
复制
- (void) dealloc
{
      [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DecodeComplete" object:self];
    //[super dealloc];
}

//事后通知

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] postNotificationName:@"DecodeComplete" object:self];

有人可以告诉我我做错了什么。

提前谢谢。

//调用方法如下(调用8次)

代码语言:javascript
复制
-(void)decode
{
   NSLog(@"---------- Decoding is Complete ---------");
     [[NSNotificationCenter defaultCenter]  postNotificationName:@"MdjDecodeComplete" object:self];

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-22 06:39:10

initWithFrame:(CGRect)frame解决方案:--我重新检查了代码,调用了8次,添加了8次NSNotification观察者。

所以我把我的代码做了这样的修改-->>初始化。

代码语言:javascript
复制
static bool note=YES;
- (id)initWithFrame:(CGRect)frame
{
  self = [super initWithFrame:frame];
  if (self) {
  if(note)
 [[NSNotificationCenter defaultCenter] addObserver:self

                                                  selector:@selector(getHRImage:)
                                                         name:@"DecodeComplete" object:nil]; note=NO;}   

->>

代码语言:javascript
复制
- (void) dealloc
  {
    note=true;

  [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DecodeComplete" object:nil];
//[super dealloc];
}

现在,addObserver方法只调用了一次,所以我的问题就解决了。谢谢大家的宝贵指导。

票数 5
EN

Stack Overflow用户

发布于 2015-04-20 09:28:55

在ARC环境中不会调用- (void) dealloc。Instread,您可以在添加观察者之前删除它,如下所示:

代码语言:javascript
复制
- (id)initWithFrame:(CGRect)frame
{
  self = [super initWithFrame:frame];
  if (self) {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DecodeComplete" object:self];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getHRImage:) name:@"DecodeComplete" object:nil];     
  }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29743884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档