pinterest / PINOperation

Apache License 2.0
103 stars 49 forks source link

Performance group cancel. #23

Open kinarobin opened 5 years ago

kinarobin commented 5 years ago
  1. Once you want cancel group, the_groupToOperationReferences contains all object,

    for (id <PINOperationReference>operationReference in [_groupToOperationReferences objectEnumerator]) 
    {
     if ([_operationQueue cancelOperation:operationReference]) {
            dispatch_group_leave(_group);
     }  
    }

    Execute all object's cancelOperation is so expensive, So I remove single operationReference when single operation had finished.

  2. If the group start, it's not necessary to nil out the containers.

    _operations = nil;
    _operationPriorities = nil;
    _operationReferences = nil;

    Just remove all objects. Thus support adding operations after completion or cancelation.

ghost commented 5 years ago
1 Warning
:warning: Any source code changes should have an entry in CHANGELOG.md or have #trivial in their title.

Generated by :no_entry_sign: Danger