static inline void Onidlethreadasync (void (^block) ()) {if (![ Nsthread Ismainthread]) {block (); Return } static Nsoperationqueue *queue; Static dispatch_once_t Oncetoken; Dispatch_once (&oncetoken, ^{queue = [Nsoperationqueue new]; }); Cfuuidref uuidref = cfuuidcreate (NULL); Cfstringref uuidstringref = cfuuidcreatestring (NULL, uuidref); Cfrelease (UUIDREF); NSString *uuidvalue = (__bridge NSString *) uuidstringref; NSString *name = [NSString stringwithformat:@ "enqueueidlethreadnotification_%@", Uuidvalue]; Nsnotification *notification = [nsnotification notificationwithname:name object:nil]; ID __block token = [[Nsnotificationcenter defaultcenter] addobserverforname:name object:nil queue:queue usingBlock:^ ( Nsnotification * _nonnull Note) {block (); [[Nsnotificationcenter Defaultcenter] removeobserver:token]; }]; [[Nsnotificationqueue Defaultqueue] Enqueuenotification:notification Postingstyle:nspostwheniDLE];}
Place code into idle thread execution