2011-05-25 38 views
1

我有一個擴展的UIViewController並實現UIWebViewDelegate,像這樣一類:UIWebView的泄漏

@interface TableViewController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate>{ 
    UIWebView *articleWebView; 
    NSString *link; 
    UIActivityIndicatorView *activityIndicator; 
    NSURL * safariUrl; 
} 

我想一個網頁加載到一個UIWebView,一切工作正常,但我發現了一些泄漏(像GeneralBlock-56,GeneralBlock-1024等),我找不到它們來自哪裏。
這是我在做什麼:

- (void)viewDidLoad { 
[super viewDidLoad]; 

if (articleWebView){ 
    [articleWebView loadHTMLString: @"" baseURL: nil]; 
    [articleWebView release]; 
    articleWebView = nil; 
} 

articleWebView = [[UIWebView alloc] initWithFrame: CGRectMake(0,0,320,380)]; 
if (activityIndicator){ 

    [activityIndicator release]; 
    activityIndicator = nil; 
} 
activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(self.view.bounds.size.width/2-24, self.view.bounds.size.height/3-12, 50, 50)]; 
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 
[self.view addSubview:activityIndicator]; 


link = [link stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
link = [link stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
link = [(NSString*) CFURLCreateStringByAddingPercentEscapes (NULL, (CFStringRef)link, NULL, 
                  NULL, kCFStringEncodingUTF8) autorelease]; 


NSURL *url = [NSURL URLWithString:link]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

[[self articleWebView] setDelegate: self]; 

[articleWebView loadRequest:requestObj]; 

[link release]; 

} 

////////////////////////////////////////////// 
-(void)webViewDidFinishLoad:(UIWebView *)webView{ 
if (activityIndicator){ 
    [activityIndicator stopAnimating]; 
    [activityIndicator release]; 
    activityIndicator = nil; 
    self.view = articleWebView; 

} 
////////////////////////////////////////////// 
- (void)viewDidUnload { 
    [super viewDidUnload]; 
    [articleWebView loadHTMLString: @"" baseURL: nil]; 
    [self.articleWebView release]; 
    self.articleWebView = nil; 
} 
////////////////////////////////////////////// 
- (void)dealloc { 
    self.articleWebView.delegate=nil; 
    [super dealloc]; 
} 

我到底做錯了什麼?先謝謝你。

回答

0

如果articeWebviewIBOutlet爲什麼你要allocate呢??

+0

非常感謝您的回答。你是對的,起初我雖然會通過界面生成器,然後改變了主意,但忘了刪除IBOutlet。我會更新我的問題。無論如何,刪除它仍然留下2泄漏(GeneralBlock56,GeneralBlock-1024)。任何想法我做錯了什麼? – CrisDeBlonde 2011-05-25 12:02:07

+0

哪個對象負責泄漏。使用構建和分析並查看泄漏是如何發生的。只要確保你釋放了所有當你不再需要它們時所擁有的對象 – visakh7 2011-05-25 12:07:13

+0

我已經試過了這些。在樂器中,當我嘗試雙擊泄漏以查看它來自哪裏時,它只是說「不可用」,所以我無法找到泄漏的來源。無論如何,感謝您的嘗試:) – CrisDeBlonde 2011-05-25 12:13:45

1

隨着webView委託設置爲零,你應該問你的webView停止加載。添加下面的代碼行,然後嘗試:

- (void)dealloc { 
    self.articleWebView.delegate = nil; 
    [articleWebView stopLoading]; 
    [articleWebView release]; 
    [super dealloc]; 
} 
+0

@高清感謝您的答案。這也沒有幫助。此外,我認爲dealloc方法不會在我查看uiwebview時被調用,所以我不認爲從dealloc中缺少某些東西 - 我錯了嗎?當uiwebview加載並變得可見時,會出現泄漏。 – CrisDeBlonde 2011-05-25 13:46:40