It is ok to push 300 NSOperations to NSoperationQueue. NSoperationQueue will not run all of them at the same time - it will limit the number of currently running operations. You also can manually set the number of concurrent operations using
- (void)setMaxConcurrentOperationCount:(NSInteger)count
Sets the maximum number of concurrent operations that the receiver can
execute. The specified value affects only the receiver and the
operations in its queue. Other operation queue objects can also
execute their maximum number of operations in parallel. Reducing the
number of concurrent operations does not affect any operations that
are currently executing. If you specify the value
NSOperationQueueDefaultMaxConcurrentOperationCount (which is
recommended), the maximum number of operations can change dynamically
based on system conditions.
UPDATE:
Setting the 'MaxConcurrentOperationCount' you set the upper limit. But the system decides itself how many downloads run simultaneously. So even if you will set MaxConcurrentOperationCount to 300 in fact usually system will run 1-10 operations at the same time.
System does not know what operations do. AFAIK it analyses only CPU and memory usage to determine how many operations run simultaneously. So it can run 10 operations simultaneously even if your connection is bad - not a good idea. In such a case, if your operations use network it will be a good idea to set MaxConcurrentOperationCount to 1-2 for GPRS/EDGE connection and to 5-10 for WiFi.