我有一个new视图,我想在某些情况下创建一个新的实例。
我这样做:
if(self.webViewController){
self.webViewController = nil;
[self.webViewController release];
}
self.webViewController = [[WebViewController alloc]initWithNibName:@"TheWebView" bundle:nil];在self.webViewController中,我听NSNotification
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
NSLog(@"INITING WebView");
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPageRequest:) name:@"doPageRequest" object:nil];
return self;
}但是,如果我发送消息doPageRequest,它会被多次调用。因此,我的假设是还有更多的webView实例“活动”,意思是:当我创建新实例时,旧实例没有被正确释放。
发布于 2013-09-06 07:55:14
应该在[[NSNotificationCenter defaultCenter] removeObserver:self];方法中调用dealloc
添加以下内容,并从init方法中删除removeObserver行。
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}当您重新创建一个视图控制器时,self会发生变化,它是指向新viewcontroller所在的内存的一个新部分的指针。
因此,在init中调用[[NSNotificationCenter defaultCenter] removeObserver:self];将永远不会删除您在init中添加的前一个init。
另外,在调用发布之前设置self.webViewController = nil;,显然这不起作用(您在零上调用release ),所以切换顺序。
[self.webViewController release];
self.webViewController = nil;https://stackoverflow.com/questions/18652647
复制相似问题