gpt4 book ai didi

ios - 使用 NSRunloop 避免事件驱动代码

转载 作者:行者123 更新时间:2023-11-29 13:40:36 26 4
gpt4 key购买 nike

我正在使用 NSUrlConnection 来发出 http 请求。我想避免使用事件驱动代码,所以我通过以下方式使用 NSRunloop:

NSURLRequest *request = [[NSURLRequest alloc]
initWithURL: [NSURL URLWithString:_urlString]
cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval: 10
];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if(!connection)
{
DebugLog(@"Creating a connection has failed");
[self setValidationRequestResult:false];
}
else
{
NSRunLoop* currentRunLoop = [NSRunLoop currentRunLoop];
[self.connection start];
while (self.isConnectionComplete == NO)
{
NSDate* dateLimit = [NSDate dateWithTimeIntervalSinceNow:0.05];
[currentRunLoop runUntilDate:dateLimit];
}

//TODO: check release of NSUrlConnection
}
}

// Now perform remaining tasks ........

在 NSRunLoop 上面显示的方式是否可以,或者我们应该在“didFailWithError”和“connectionDidFinishLoading”中发布通知以在 http 请求完成后编写逻辑?

最佳答案

虽然这种方法在技术上可能是正确的,但我鼓励您问问为什么要这样做。

NSURLConnection 被设计为将自身附加到一个运行循环,这样运行循环可以继续而不占用该线程。

我在我的应用程序中所做的是有一个类专门用于管理我的网络代码,并有委托(delegate)回调或传入 block 来处理完成。您提到使用通知,这也是一个好主意。

这是异步网络代码的本质。它使代码更复杂一些,但您的应用程序会更好。

关于ios - 使用 NSRunloop 避免事件驱动代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304253/

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