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