Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS9、NSNotificationCenter以及何时发布_Ios_Ios9 - Fatal编程技术网

iOS9、NSNotificationCenter以及何时发布

iOS9、NSNotificationCenter以及何时发布,ios,ios9,Ios,Ios9,我的代码在以前版本的iOS(6、7和8)上运行,但在iOS 9上,我的一个变量在我显式释放它之前就已经释放了。在处理通知后,NSNotificationCenter似乎希望释放侦听对象,但该变量在其他地方仍然很强 有一个单例类保存应用程序的所有参数。它创建一个名为CardParmsList的对象 static Parms * singleton = nil; @implementation Parms - (id)init { self = [super init]; if

我的代码在以前版本的iOS(6、7和8)上运行,但在iOS 9上,我的一个变量在我显式释放它之前就已经释放了。在处理通知后,NSNotificationCenter似乎希望释放侦听对象,但该变量在其他地方仍然很强

有一个单例类保存应用程序的所有参数。它创建一个名为CardParmsList的对象

static Parms * singleton = nil;

@implementation Parms

- (id)init
{
    self = [super init];

    if (self)
    {
        cardParms = [[ CardParmsList alloc] init];
    }

    return self;
}


- (void)dealloc
{
    [cardParms release];

    [super dealloc];
}

-(void)getAllParms
{
    [[self getCardParms] getParms:"123456" length:16];
}
在cardParms类中,当获取parms时,它会为通知添加一个观察者

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(parseParms)
                                      name:CARD_PARMS_DONE
                                      object:nil];
然后在parseParms中删除观察者(在iOS9中不再需要)

parseParms完成后,尽管我认为NSNotificationCenter正在删除我的CardParmsList实例,因为正在调用它。但是仍然有一个指向该对象的强指针,因此不应该清理它。有什么想法吗

0   0x00057f68 in -[CardParmsList release] at CardParms.mm:260
1   0x2655688e in -[_CFXNotificationRegistrar find:object:observer:enumerator:] ()
2   0x264650a2 in _CFXNotificationPost ()
3   0x27247f0e in -[NSNotificationCenter postNotificationName:object:userInfo:] ()
4   0x2724ca42 in -[NSNotificationCenter postNotificationName:object:] ()

澄清这个问题。从
CardParmsList
中删除通知观察员时出现问题,您没有显示以下代码:(,您展示了一些不相关的代码,这些代码只包含对感兴趣部分的引用。您没有描述问题的本质:是崩溃还是强引用循环?最终的问题是,一旦观察者被移除,寻找通知的对象就会被释放,我认为不应该被释放。一旦它被释放当我稍后去访问它时,它显然会爆炸。还有一件事我没有说清楚-代码在iOS 6、7和8上工作,但在iOS 9上工作-没有bueno。请澄清问题。您在从
CardParmsList
中删除notification observer时遇到问题,您没有显示哪些代码:(,您展示了一些不相关的代码,这些代码只包含对感兴趣部分的引用。您没有描述问题的本质:是崩溃还是强引用循环?最终的问题是,一旦观察者被移除,寻找通知的对象就会被释放,我认为不应该被释放。一旦它被释放还有一件事我没有说清楚——代码在iOS 6、7和8上运行,但在iOS 9上运行——没有bueno。
0   0x00057f68 in -[CardParmsList release] at CardParms.mm:260
1   0x2655688e in -[_CFXNotificationRegistrar find:object:observer:enumerator:] ()
2   0x264650a2 in _CFXNotificationPost ()
3   0x27247f0e in -[NSNotificationCenter postNotificationName:object:userInfo:] ()
4   0x2724ca42 in -[NSNotificationCenter postNotificationName:object:] ()