簡體   English   中英

UIWebView loadRequest導致模擬器崩潰

[英]UIWebView loadRequest causing a crash in simulator

因此,我正在嘗試將簡單的URL(http://www.google.com)加載到網絡視圖中。 我在正在使用的應用程序中擁有此功能,但將其歸結為一個基本應用程序以刪除其他變量。 我有一個絕對最小的應用程序設置,一個視圖控制器,以webview作為其主要視圖。 對於代碼我有

-(void)viewDidLoad
{
    [super viewDidLoad];

    UIWebView *webView = (UIWebView*)self.view;
    NSMutableString *urlString = [[NSMutableString alloc] initWithString:@"http://www.google.com"];
    NSURL* url = [[NSURL alloc] initWithString:urlString];
    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
    NSLog(@"Sending web request to %@", urlString);

    [webView loadRequest:urlRequest];

    [urlRequest release];
    [url dealloc];
    [urlString dealloc];
}

並且在加載時,我在Web線程中遇到EXC_BAD_ACCESS崩潰。 我不確定這是否與我在模擬器中工作有關,還是我剛剛搞錯了設置有關的問題。

不要調用dealloc 調用urlurlString上的release

這是因為其他對象都引用了這些對象,並且當您說dealloc ,您明確地銷毀了它們。 這導致EXC_BAD_ACCESS ,因為當其他對象嘗試訪問url和string對象時,它們已被破壞。

這是參考計數的全部要點。 這些對象已經完成,所以如果您說:

[url release];
[urlString release];

您是在聲明。 這減少了對那些對象的引用計數。 但是在上面,您說:

NSURL* url = [[NSURL alloc] initWithString:urlString];

這意味着url可能引用了該字符串。 因此創建它時它會retain它。 因此,釋放字符串后,它不會被銷毀,因為url仍然具有對它的引用。 當IT完成后,它也將釋放它,然后(如果沒有其他人聲明該對象),它將自動取消dealloc ,因為它的計數將減少為零。

在處理這種內存管理時,請始終記住還有誰在使用您的對象。 您可以在Apple的文檔中閱讀有關它的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM