gpt4 book ai didi

objective-c - NSURLRequest 自动释放 : crash

转载 作者:行者123 更新时间:2023-12-03 18:03:38 25 4
gpt4 key购买 nike

我在释放 NSMutableURLRequest 对象时遇到问题。应用程序在请求对象释放期间崩溃。

该对象是通过 [[NSMutableURLRequest alloc] initWithURL:my_http_url] 创建的;

作为主流控制流,我尝试释放连接对象以响应调用的connectionDidFinishLoading处理程序。

首先,我尝试在connectionDidFinishLoading处理程序中自动释放NSMutableURLRequest。这导致了崩溃,所以我认为这可能是因为连接类在调用connectionDidFinishLoading之前在内部推送自动释放池,并且仍然期望连接对象在处理程序返回时有效,因此不可能在connectionDidFinishLoading内释放或自动释放连接对象。

如果我根本不释放 NSMutableURLRequest,根据 Instruments 的说法,它会泄漏,引用计数为 1。

因此,我决定通过触发 NSRunLoop 事件来延迟发布,该事件会自动释放 NSMutableURLRequest 传递给它。这仍然会导致崩溃。

调用autorelease之前的retainCount为1。

崩溃堆栈是:

#

0   0x9448aedb in objc_msgSend
#1 0x04a47ce0 in ??
#2 0x02e51501 in HTTPMessage::~HTTPMessage
#3 0x02945621 in _CFRelease
#4 0x02e516a9 in HTTPRequest::~HTTPRequest
#5 0x02e50967 in URLRequest::~URLRequest
#6 0x02945621 in _CFRelease
#7 0x0032fb70 in -[NSURLRequestInternal dealloc]
#8 0x0032fb1a in -[NSURLRequest dealloc]
#9 0x002f27a5 in NSPopAutoreleasePool
#10 0x003b5dd0 in __NSFirePerformTimer
#11 0x0299e8a2 in __CFRunLoopDoObservers
#12 0x0296a39e in CFRunLoopRunSpecific
#13 0x0296a048 in CFRunLoopRunInMode
#14 0x031d289d in GSEventRunModal
#15 0x031d2962 in GSEventRun
#16 0x0058ede1 in UIApplicationMain
#17 0x00002b9c in main at main.m:14

感谢您的建议。

最佳答案

使用NSDebugEnabled/NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled后,我发现了问题:

结果

http_url = [NSURL URLWithString:...]

应该保留或不自行自动释放。

关于objective-c - NSURLRequest 自动释放 : crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4073721/

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