gpt4 book ai didi

objective-c - NSURLSession 委托(delegate)队列

转载 作者:太空狗 更新时间:2023-10-30 03:29:16 24 4
gpt4 key购买 nike

这看起来很奇怪。我似乎无法在创建时成功设置 NSURLSession 的 delegateQueue。

- (void)viewDidLoad
{
[super viewDidLoad];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 5;

NSLog(@"The queue before: %@", queue);
NSLog(@"Max op Count before: %i", queue.maxConcurrentOperationCount);

NSURLSession *session = [NSURLSession sessionWithConfiguration:nil
delegate:self
delegateQueue:queue];

NSLog(@"The queue after: %@", session.delegateQueue);
NSLog(@"Max op Count after : %i", session.delegateQueue.maxConcurrentOperationCount);
}

这会导致以下输出。

The queue before: <NSOperationQueue:   0x16d99160>{name = 'NSOperationQueue 0x16d99160'}
Max op Count before: 5
The queue after: <NSOperationQueue: 0x16d77a50>{name = 'NSOperationQueue 0x16d77a50'}
Max op Count after : 1

看起来我的 delegateQueue 被忽略了。我在设备和模拟器上都试过了。我还没有找到任何可以解释这一点的文件。有没有人有任何见解?

最佳答案

看起来,不管 delegateQueue 的 getter 怎么说,NSURLSession 确实在使用你的 NSOperationQueue。我为队列中的“操作”属性添加了 KVO:

[queue addObserver:self forKeyPath:@"operations" options:NSKeyValueObservingOptionNew context:NULL];

并添加了如下方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@%@", object, change);
NSOperationQueue *queue = (NSOperationQueue *)object;

NSLog(@"The queue in KVO: %@", queue);
NSLog(@"Max op Count in KVO: %i", queue.maxConcurrentOperationCount);

NSLog(@"%@", self.session.delegateQueue);

}

它打印:

2013-09-29 07:45:13.751 sotest1[17214:1403] <NSOperationQueue: 0x895e0c0>{name = 'NSOperationQueue 0x895e0c0'}
2013-09-29 07:45:13.757 sotest1[17214:4207] <NSOperationQueue: 0x98a0940>{name = 'NSOperationQueue 0x98a0940'}{
kind = 1;
new = (
"<NSBlockOperation: 0x9a52370>"
);
}
2013-09-29 07:45:13.757 sotest1[17214:4207] The queue in KVO: <NSOperationQueue: 0x98a0940>{name = 'NSOperationQueue 0x98a0940'}
2013-09-29 07:45:13.757 sotest1[17214:4207] Max op Count in KVO: 5

所以你可以看到委托(delegate)确实被你的队列处理了,尽管 getter 另有说明。很奇怪。

顺便说一句,AFNetworking 也正是这样做的,这通常是一个好兆头:https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/AFURLSessionManager.m#L287

关于objective-c - NSURLSession 委托(delegate)队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074483/

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