-->

How do I move these processes from the AppDelegate

2019-08-25 06:40发布

问题:

I know this is not best practice so I would like to know what's the best way to remove all these requests to individual delegates as to reduce loading time. The result is to have each feed load as soon as it is called or have them load asynchronously

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:           (NSDictionary *)launchOptions
{
// Override point for customization after application launch.

// make RSS call
JSTRRSSReader *reader = [[JSTRRSSReader alloc] init];
[reader startRequest];

BUSINESSReader *busreader = [[BUSINESSReader alloc] init];
[busreader startRequest];

SPORTSReader *sportreader = [[SPORTSReader alloc] init];
[sportreader startRequest];

LIFESTYLEReader *lifestylereader = [[LIFESTYLEReader alloc] init];
[lifestylereader startRequest];

TEENAGEReader *teenagereader = [[TEENAGEReader alloc] init];
[teenagereader startRequest];

EDITORIALReader *editorialreader = [[EDITORIALReader alloc] init];
[editorialreader startRequest];

COLUMNReader *columnreader = [[COLUMNReader alloc] init];
[columnreader startRequest];

FOODReader *foodreader = [[FOODReader alloc] init];
[foodreader startRequest];

ALLWOMANReader *allwomanreader = [[ALLWOMANReader alloc] init];
[allwomanreader startRequest];

LETTERSReader *lettersreader = [[LETTERSReader alloc] init];
[lettersreader startRequest];

AUTOReader *autoreader = [[AUTOReader alloc] init];
[autoreader startRequest];

ENTERTAINMENTReader *entertainmentreader = [[ENTERTAINMENTReader alloc] init];
[entertainmentreader startRequest];

ENVIRONMENTReader *environmentreader = [[ENVIRONMENTReader alloc] init];
[environmentreader startRequest];

CAREERReader *careerreader = [[CAREERReader alloc] init];
[careerreader startRequest];

MAINReader *mainreader = [[MAINReader alloc] init];
[mainreader startRequest];

SLIDERReader *sliderreader = [[SLIDERReader alloc] init];
[sliderreader startRequest];

return YES;
}

回答1:

I'm not 100% sure what you are asking. But if your work is thread safe, you can wrap each of those calls in an async block.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    FOODReader *foodreader = [[FOODReader alloc] init];
    [foodreader startRequest];  //not sure if this is blocking or not, guessing yes

    dispatch_async(dispatch_get_main_queue(), ^{
          //do stuff here after the blocking call has finished. maybe notify delegate, etc
    });
});