首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建新的UIViewController实例,删除旧实例?

创建新的UIViewController实例,删除旧实例?
EN

Stack Overflow用户
提问于 2013-09-06 07:53:47
回答 1查看 473关注 0票数 2

我有一个new视图,我想在某些情况下创建一个新的实例。

我这样做:

代码语言:javascript
复制
if(self.webViewController){
    self.webViewController = nil;
    [self.webViewController release];
}

self.webViewController = [[WebViewController alloc]initWithNibName:@"TheWebView" bundle:nil];

self.webViewController中,我听NSNotification

代码语言:javascript
复制
- (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实例“活动”,意思是:当我创建新实例时,旧实例没有被正确释放。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 07:55:14

应该在[[NSNotificationCenter defaultCenter] removeObserver:self];方法中调用dealloc

添加以下内容,并从init方法中删除removeObserver行。

代码语言:javascript
复制
-(void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

当您重新创建一个视图控制器时,self会发生变化,它是指向新viewcontroller所在的内存的一个新部分的指针。

因此,在init中调用[[NSNotificationCenter defaultCenter] removeObserver:self];将永远不会删除您在init中添加的前一个init。

另外,在调用发布之前设置self.webViewController = nil;,显然这不起作用(您在零上调用release ),所以切换顺序。

代码语言:javascript
复制
[self.webViewController release];
self.webViewController = nil;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18652647

复制
相关文章

相似问题

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