Iphone UIWebView loadRequest导致模拟器崩溃
所以我尝试加载一个简单的URL(http://www.google.com)进入web视图。我在正在使用的应用程序中使用了这个,但将其归结为一个基本应用程序,以删除其他变量。我有一个绝对最小的应用程序设置,一个视图控制器,它的主视图是webview。对于代码我有Iphone UIWebView loadRequest导致模拟器崩溃,iphone,objective-c,ios,memory-management,uiwebview,Iphone,Objective C,Ios,Memory Management,Uiwebview,所以我尝试加载一个简单的URL(http://www.google.com)进入web视图。我在正在使用的应用程序中使用了这个,但将其归结为一个基本应用程序,以删除其他变量。我有一个绝对最小的应用程序设置,一个视图控制器,它的主视图是webview。对于代码我有 -(void)viewDidLoad { [super viewDidLoad]; UIWebView *webView = (UIWebView*)self.view; NSMutableString *ur
-(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_访问崩溃。我不确定这是否是与我在模拟器中工作有关的问题,或者是我刚刚把设置搞砸的问题。不要调用
dealloc
。在url
上调用release
,然后调用urlString
这是因为其他对象引用了这些对象,当您说dealloc
时,您是在显式地销毁它们。这会导致EXC\u BAD\u ACCESS
,因为当其他对象尝试访问url和字符串对象时,它们已经被销毁
这是整个参考点计数。你已经处理完这些对象了,所以如果你说:
[url release];
[urlString release];
你是在宣布。这将减少对这些对象的引用计数。但在上面,你说:
NSURL* url = [[NSURL alloc] initWithString:urlString];
这意味着url
可能引用了该字符串。因此,当您创建它时,它将保留它。因此,在释放字符串后,它不会被销毁,因为url
仍然有对它的引用。处理完后,它也会释放它,然后(如果没有其他人对该对象拥有所有权),它会自动被dealloc
ed,因为它的计数将下降到零
在处理这种内存管理时,请始终记住还有谁在使用您的对象。您可以在中阅读更多信息。不要调用
dealloc
。在url
上调用release
,然后调用urlString
这是因为其他对象引用了这些对象,当您说dealloc
时,您是在显式地销毁它们。这会导致EXC\u BAD\u ACCESS
,因为当其他对象尝试访问url和字符串对象时,它们已经被销毁
这是整个参考点计数。你已经处理完这些对象了,所以如果你说:
[url release];
[urlString release];
你是在宣布。这将减少对这些对象的引用计数。但在上面,你说:
NSURL* url = [[NSURL alloc] initWithString:urlString];
这意味着url
可能引用了该字符串。因此,当您创建它时,它将保留它。因此,在释放字符串后,它不会被销毁,因为url
仍然有对它的引用。处理完后,它也会释放它,然后(如果没有其他人对该对象拥有所有权),它会自动被dealloc
ed,因为它的计数将下降到零
在处理这种内存管理时,请始终记住还有谁在使用您的对象。你可以在上面阅读更多的内容。 d'Oh,好点…我通常是C++程序员,所以这个管理的东西对我来说是很新的。Thanks@DanF:哈哈,没问题。与
new
和delete
等相比,它很容易忘记。不过,我想我更喜欢这个方案。=)哦,好点…我通常是C++程序员,所以这个管理的东西对我来说是很新的。Thanks@DanF:哈哈,没问题。与new
和delete
等相比,它很容易忘记。不过,我想我更喜欢这个方案。=)