iOS9、NSNotificationCenter以及何时发布
我的代码在以前版本的iOS(6、7和8)上运行,但在iOS 9上,我的一个变量在我显式释放它之前就已经释放了。在处理通知后,NSNotificationCenter似乎希望释放侦听对象,但该变量在其他地方仍然很强 有一个单例类保存应用程序的所有参数。它创建一个名为CardParmsList的对象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
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:] ()