gpt4 book ai didi

iPhone SDK : POSTing NSData with NSMutableURLRequest results in mysterious crash

转载 作者:太空狗 更新时间:2023-10-30 03:31:49 27 4
gpt4 key购买 nike

我看到在我发出的 POST 请求完成后 10 或 20 秒发生崩溃( didReceiveResponsedidReceiveDataconnectionDidFinishLoading 都在崩溃发生之前就已触发)。

这是我用来发出请求的代码:

NSURL* url = [[NSURL alloc] initWithString:urlString];
[urlString release];

NSData* requestData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];
NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [requestData length]];

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:requestData];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval:30.0];
[url release];
[requestData release];
[requestDataLengthString release];

m_URLConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];

这次崩溃的奇怪之处在于:如果我不调用 setHTTPBody 用我的NSData对象,setValue:@"application/json"对于 Content-TypesetValue:requestDataLengthString对于 Content-Length ,崩溃不会不会发生。我对正在发生的事情感到非常困惑。据我所知,崩溃与发送 NSData 直接相关。反对我的要求。当它确实崩溃时,崩溃调用堆栈中的顶部元素 ( EXEC_BAD_ACCESS ) 如下:

  • objc_msgSend
  • CFRelease
  • HTTPMessage::~HTTPMessage
  • _CFRelease
  • HTTPWriteFilter::~HTTPWriteFilter

谁能想到我可能做错了什么?我完全不知道我做错了什么,如何解决它,或者如何解决它。有没有比我现在的方式更好的 POST 数据方式?

最佳答案

您是对的,问题出在您的 NSData 对象上。您正在这样分配它:

NSData* requestData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];

根据 Memory Management Programming Guide for Cocoa 中规定的规则,您不是数据的所有者,因此您以后不应该对其调用 releasedataUsingEncoding 调用 autorelease,因此该对象将在下次自动释放池耗尽时被released。因为您要添加一个额外的release,自动释放池将尝试释放一个已经被释放的对象,这会导致崩溃。

关于iPhone SDK : POSTing NSData with NSMutableURLRequest results in mysterious crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628472/

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