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

时间:2013-09-06 07:53:48

标签: ios objective-c

我有一个webview我想在某些情况下创建一个新实例。

我这样做:

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实例“活动”,意味着:当我创建新实例时,旧实例未正确释放。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:2)

您应该调用[[NSNotificationCenter defaultCenter] removeObserver:self];方法

中的dealloc

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

-(void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

self在重新创建视图控制器时发生更改,它是指向新ViewController所在内存的新部分的指针。
所以在init中调用[[NSNotificationCenter defaultCenter] removeObserver:self];永远不会删除你在init中添加的前一个。

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

[self.webViewController release];
self.webViewController = nil;