由于某些原因,下面的代码偶尔可以工作。我已经检查了很多次URL,这并不有趣(它返回纯文本,我想解析)。代码是100%的功能,然后它就停止工作,并开始给我一个EXC_BAD_ACCESS
错误。
调试输出中除了一行表示输出两次切换到进程之外,没有什么可发布的。(除了一些关于双重释放的事情。)
到目前为止(就我所能记得的)我已经试过了:
- 重新安装应用程序-它只在"默认"运行时有问题(不是第一次运行/初始化运行)
- 在浏览器(chrome, firefox, IE…)中运行URL
- 将呼叫放入
@try / @catch
块 - 使用
retain
- 使用温度
NSAutoreleasePool
- 拆分/分离调用的元素(连同登录Everything - 一旦遇到错误,没有任何记录)
- 使用
dataWithContentsOfURL
函数与上述
NSAutoreleasePool *tmpPool = [[NSAutoreleasePool alloc] init];
NSString *url_string = [self getNormalVersionDownloadURL];
NSLog(@"urlString: -%@-", url_string);
NSError *er;
NSURL *the_URL = [[NSURL URLWithString:url_string] retain];
NSString *version_String = [NSString stringWithContentsOfURL:the_URL encoding:NSASCIIStringEncoding error:&er];
NSLog(@"verions_string: -%@-", version_String);
if ([version_String length] < 16)
return;
[tmpPool release];
(NSAutoreleasePool
和autorelease
由于http://discussions.apple.com/thread.jspa?threadID=1667544添加)
(已兑现页面- http://webcache.googleusercontent.com/search?q=cache:8D7zlQdG9PMJ:discussions.apple.com/thread.jspa%3FthreadID%3D1667544+http://discussions.apple.com/thread.jspa%3FthreadID%3D1667544&cd=1&hl=en&ct=clnk&gl=us&source=www.google.com)
discussions.apple.com目前已关闭,因此我无法阅读讨论主题。无论如何:
NSString *url_string = [[self getNormalVersionDownloadURL] autorelease];
-getNormalVersionDownloadURL
返回一个拥有的还是非拥有的对象?只有当方法返回一个已拥有的对象时,才发送-autorelease
。
NSError **er;
应该是NSError *er
,或者应该用NSError *
类型变量的地址初始化。由于后者不常见且不必要,下面假设NSError *er
.
NSURL *the_URL = [[NSURL URLWithString:url_string] autorelease];
+URLWithString:
返回一个你不拥有的NSURL
对象,因此你不(自动)释放它。
version_String = [[NSString stringWithContentsOfURL:the_URL
encoding:NSASCIIStringEncoding error:er] autorelease]; //ERROR occurs here
两个问题::+stringWithContentsOfURL:
返回一个你不拥有的NSString
对象,因此你没有(自动)释放它。此外,第三个参数应该是&er
而不是er
。
URLWithString和stringWithContentsOfURL是方便的方法,然后已经把变量自动释放,我不认为你需要添加自动释放,同时创建the_URL和version_String
尝试删除自动释放…