gpt4 book ai didi

iphone - UIWebView loadRequest 导致模拟器崩溃

转载 作者:行者123 更新时间:2023-11-28 20:46:48 24 4
gpt4 key购买 nike

所以我正在尝试将一个简单的 URL (http://www.google.com) 加载到 WebView 中。我在我正在使用的应用程序中有这个,但将其归结为一个基本应用程序以删除其他变量。我有一个绝对最小的应用程序设置,一个以 webview 作为其主要 View 的 View Controller 。对于代码,我有

-(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 可能引用了那个字符串。所以它会在您创建它时保留它。所以在你释放字符串后,它不会被销毁,因为 url 仍然有对它的引用。当 IT 用完它时,它也会释放它,然后(如果没有其他人声明该对象),它会自动被dealloced,因为它的计数会降为零。

在处理这种内存管理时,请始终牢记还有谁可能正在使用您的对象。您可以在 Apple's docs 中阅读更多相关信息.

关于iphone - UIWebView loadRequest 导致模拟器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com