以下代码由于某种原因从根本上起作用。我已经多次检查过这个URL并不好笑(它返回我要解析的纯文本)。代码是100%功能然后它停止工作并开始给我EXC_BAD_ACCESS
错误。
调试输出中没有任何内容可以发布除线以外的信息,表示输出正在切换到进程两次。 (有时候会有关于双重释放的事情。)
到目前为止(我记得很多)我试过了:
@try / @catch
区块retain
NSAutoreleasePool
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];
(由http://discussions.apple.com/thread.jspa?threadID=1667544添加NSAutoreleasePool
和autorelease
)
答案 0 :(得分:3)
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
。
答案 1 :(得分:0)
URLWithString和stringWithContentsOfURL是方便的方法,然后已经将变量放入autorelease中我认为你不需要在创建the_URL和version_String时添加自动释放
尝试删除autorelease ...