Synchronization with remote web service
You can use NSPredicate:

NSArray* productsToDelete = [allLocal filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (productId IN %@)", allRemoteIds]];
for(Product* product in productsToDelete) {
    [product delete];
}


This will for sure improve readability of your code. I'm not sure about performance, but I would assume that Apple's implementation of filteredArrayUsingPredicate should be fast enough. If you really want to know it, do some profiling. 

You can also read great article about performance of collections in Objective-C:

http://www.objc.io/issue-7/collections.html