[英]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
。 調用url
和urlString
上的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.