Better concurrency support in iOS API Manager #45
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
As highlighted in another PR the current iOS client didn't have good concurrency support. This was verified with a failing unit test, then subsequently fixed using GCD queues rather than the NSLock model suggested in the other PR.
The use of the queues rather than NSLock was to increase maintainability going forward as more iOS developers would be familiar with queues than Posix thread locks.
The original API Manager was also using the whole
URLSessionTask
object as the key to its dictionary, and this task contains the whole request and response. It's a big object to be copying around and didn't need to be used as it already has a unique identifier for this purpose. I'm not sure if this was leaking but it's probably not the best way to go about it and we don't need access to the task as it's managed byURLSession
.Also converted to the Swift
Data
class fromNSMutableData
as per the suggestions in the original PR.Type of Change