Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS-¶àÏß³ÌÖ®GCD
 
×÷ÕߣºMazy_ma À´Ô´£º²©¿Í ·¢²¼ÓÚ£º2016-8-4
  1724  次浏览      27
 

ÔÚ˵GCD֮ǰ£¬ÏÈ˵¼¸¸öºËÐĵĸÅÄî

ÈÎÎñ£ºÖ´ÐÐʲô²Ù×÷

¶ÓÁУºÓÃÀ´´æ·ÅÈÎÎñ

1 - ²¢·¢¶ÓÁУ¨Concurrent Dispatch Queue£©
¿ÉÒÔÈöà¸öÈÎÎñ²¢·¢£¨Í¬Ê±£©Ö´ÐУ¨×Ô¶¯¿ªÆô¶à¸öÏß³ÌͬʱִÐÐÈÎÎñ£©
²¢·¢¹¦ÄÜÖ»ÓÐÔÚÒì²½£¨dispatch_async£©º¯ÊýϲÅÓÐЧ

2 - ´®ÐжÓÁУ¨Serial Dispatch Queue£©
ÈÃÈÎÎñÒ»¸ö½Ó×ÅÒ»¸öµØÖ´ÐУ¨Ò»¸öÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÖ´ÐÐÏÂÒ»¸öÈÎÎñ£©

ͬ²½ºÍÒì²½µÄÇø±ð

ͬ²½£ºÖ»ÄÜÔÚµ±Ç°Ïß³ÌÖÐÖ´ÐÐÈÎÎñ£¬²»¾ß±¸¿ªÆôÐÂÏ̵߳ÄÄÜÁ¦

Òì²½£º¿ÉÒÔÔÚеÄÏß³ÌÖÐÖ´ÐÐÈÎÎñ£¬¾ß±¸¿ªÆôÐÂÏ̵߳ÄÄÜÁ¦

GCDʹÓò½Öè

Ò»¡¢´´½¨ÈÎÎñ

¶þ¡¢½«ÈÎÎñÌí¼Óµ½¶ÓÁÐÖÐ

GCD»á×Ô¶¯½«¶ÓÁÐÖеÄÈÎÎñÈ¡³ö£¬·Åµ½¶ÔÓ¦µÄÏß³ÌÖÐÖ´ÐÐ

ÈÎÎñµÄÈ¡³ö×ñÑ­¶ÓÁеÄFIFOÔ­Ôò£ºÏȽøÏȳö£¬ºó½øºó³ö

GCDÏ̶߳ÓÁеĴ´½¨·½·¨

1¡¢´´½¨Ò»¸ö´®ÐжÓÁÐ

/**
* ´´½¨Ò»¸ö´®ÐжÓÁÐ
*
* @param "Mazy" ¶ÓÁеıêʾ·û
* @param DISPATCH_QUEUE_SERIAL ´®ÐжÓÁÐ
DISPATCH_QUEUE_CONCURRENT ²¢·¢¶ÓÁÐ
*
* @return ·µ»Ø´®ÐжÓÁÐ
*/
dispatch_queue_t serialQueue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL);

2¡¢´´½¨Ò»¸ö²¢·¢¶ÓÁÐ

/**
* ´´½¨Ò»¸ö²¢·¢¶ÓÁÐ
*
* @param "Mazy" ¶ÓÁеıêʾ·û
* @param DISPATCH_QUEUE_CONCURRENT ²¢·¢¶ÓÁÐ
*
* @return ·µ»Ø²¢·¢¶ÓÁÐ
*/
dispatch_queue_t concurrentQueue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_CONCURRENT);

3¡¢»ñµÃÈ«¾Ö²¢·¢¶ÓÁÐ

/**
* »ñµÃÈ«¾Ö²¢·¢¶ÓÁÐ
*
* @param DISPATCH_QUEUE_PRIORITY_DEFAULT Ï̶߳ÓÁеÄÓÅÏȼ¶

DISPATCH_QUEUE_PRIORITY_HIGH 2 ¸ß
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 Ò»°ã ĬÈÏ
DISPATCH_QUEUE_PRIORITY_LOW (-2) µÍ
DISPATCH_QUEUE_PRIORITY_BACKGROUND ºÜµÍ

* @param 0 ϵͳ±£Áô²ÎÊý
*
* @return ·µ»ØÈ«¾Ö²¢·¢¶ÓÁÐ
*/
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

3¡¢»ñµÃÖ÷¶ÓÁÐ

/**
* »ñµÃÖ÷¶ÓÁÐ
*
* @return ·µ»ØÖ÷Ï̶߳ÓÁÐ
*/
dispatch_queue_t mainQueue = dispatch_get_main_queue();

ͬ²½/Òì²½ + ´®ÐÐ/²¢·¢¶ÓÁеÄ×éºÏ

1¡¢Í¬²½ + ´®ÐжÓÁÐ

// ͬ²½ + ´®ÐжÓÁУº²»»á¿ªÆôеÄỊ̈߳¬ÔÚµ±Ç°Ïß³ÌÖ´ÐÐÈÎÎñ¡£ÈÎÎñÊÇ´®Ðеģ¬Ö´ÐÐÍêÒ»¸öÈÎÎñ£¬ÔÙÖ´ÐÐÏÂÒ»¸öÈÎÎñ
-(void)sync_serial {
// ´´½¨Ò»¸ö´®ÐжÓÁÐ
dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL);
// ͬ²½Ö´ÐÐÈý¸öÈÎÎñ
dispatch_sync(queue, ^{
NSLog(@"1 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3 %@",[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺ûÓд´½¨ÐÂỊ̈߳¬Ö÷Ïß³ÌÖ´ÐÐÈÎÎñ£¬ÈÎÎñ´®ÐÐÖ´ÐÐ

2¡¢Òì²½ + ´®ÐжÓÁÐ

// Òì²½ + ´®ÐжÓÁУº¿ªÆôеÄỊ̈߳¬µ«Ö»¿ªÆôÒ»Ìõ
-(void)async_serial {
// ´´½¨Ò»¸ö´®ÐжÓÁÐ
dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_SERIAL);
// Òì²½Ö´ÐÐÈý¸öÈÎÎñ
dispatch_async(queue, ^{
NSLog(@"1 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3 %@",[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺¿ªÆôÁËÒ»ÌõỊ̈߳¬ÈÎÎñ´®ÐÐÖ´ÐÐ

3¡¢Í¬²½ + ²¢·¢¶ÓÁÐ

// ͬ²½ + ²¢·¢¶ÓÁУº²»»á¿ªÆôеÄÏß³Ì
-(void)sync_concurrent {
// ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// ͬ²½Ö´ÐÐÈý¸öÈÎÎñ
dispatch_sync(queue, ^{
NSLog(@"1 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"2 %@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"3 %@",[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺²»¿ªÆôÐÂỊ̈߳¬Ö÷Ïß³ÌÖ´ÐÐÈÎÎñ£¬ÈÎÎñÒ²ÊÇ˳ÐòÖ´ÐÐ

4¡¢Òì²½ + ²¢·¢¶ÓÁÐ

// Òì²½ + ²¢·¢¶ÓÁУºÍ¬Ê±¿ªÆô¶àÌõÏß³Ì
-(void)async_concurrent {
// ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// Òì²½Ö´ÐÐÈý¸öÈÎÎñ
dispatch_async(queue, ^{
NSLog(@"1 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"2 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"3 %@",[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõỊ̈߳¬²¢·¢Ö´ÐÐÈÎÎñ

GCDÏß³ÌÖ®¼äµÄͨÐÅ

´Ó×ÓÏ̻߳ص½Ö÷Ïß³Ì

´Ó×ÓÏ̻߳ص½Ö÷Ïß³Ì
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Ö´ÐкÄʱµÄÒì²½²Ù×÷...
dispatch_async(dispatch_get_main_queue(), ^{
// »Øµ½Ö÷Ị̈߳¬Ö´ÐÐUIˢвÙ×÷
});
});


Ïß³ÌÖ®¼äµÄͨОßÌåʵÏÖʵÀý

// ´´½¨ Òì²½ È«¾Ö²¢·¢¶ÓÁÐ
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// ͼƬµÄÍøÂç·¾¶
NSURL *url = [NSURL URLWithString:@"http://xxx.jpg"];

// ¼ÓÔØÍ¼Æ¬
NSData *data = [NSData dataWithContentsOfURL:url];

// Éú³ÉͼƬ
UIImage *image = [UIImage imageWithData:data];

// »Øµ½Ö÷Ïß³ÌÉèÖÃͼƬ
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});

GCDµÄÆäËûʹÓÃ

ÑÓ³ÙÖ´ÐÐ

/**
* ÑÓ³ÙÖ´ÐÐ
*/
-(void)delay {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"---ÎÒ±»ÑÓ³ÙÁË3ÃëÖ´ÐÐ---");
});
}

ÆäËûÑÓ³ÙÖ´Ðз½·¨

// method 1
[self performSelector:@selector(do_method) withObject:nil afterDelay:3.0];

// method 2
[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(do_method) userInfo:nil repeats:NO];

Ö»Ö´ÐÐÒ»´Î£¨ÓÃÓÚʵÏÖµ¥Àýģʽ£©

/**
* Ö»Ö´ÐÐÒ»´Î
*/
-(void)onlyOnce {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"---ÎÒÖ»»á±»Ö´ÐÐÒ»´Î---");
});
}

¿ìËÙ±éÀú

/**
* ¿ìËÙ±éÀú
*/
-(void)apply {
// ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
NSInteger count = 10;
dispatch_apply(count, queue, ^(size_t index) {
NSLog(@"%zd--%@",index,[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõÏß³ÌÖ´ÐÐÈÎÎñ£¬ËÙ¶ÈÔ¶±È£¨for¡­in¡­£© ±éÀú¿ì£¬¶ÔÓÚÎÞÐòµÄ±éÀú£¬´Ë·½·¨±È½ÏºÏÊÊ

´´½¨Ïß³ÌȺ×é

ÀýÈçͬһ¸öÎļþ·Ö¶ÎÏÂÔØ£¬´ýËùÓзֶÎÈÎÎñÏÂÔØÍê³Éºó£¬ºÏ²¢ÈÎÎñ

/**
* ´´½¨Ïß³ÌȺ×é
*/
-(void)group {
// ´´½¨Ò»¸öÈ«¾Ö²¢·¢¶ÓÁÐ
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// ´´½¨Ò»¸ö¶ÓÁÐ×é
dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-1 %@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-2 %@",[NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-3 %@",[NSThread currentThread]);
});

// ´ýȺ×éÖеÄÿ¸öÈÎÎñÖ´ÐÐÍê³Éºó£¬Ö´Ðд˷½·¨
dispatch_group_notify(group, queue, ^{
NSLog(@"ÎÒÊÇÖÕ¼«ÈÎÎñ£¬Ö»ÓÐÔÚgroupÀïÃæµÄÈÎÎñÖ´ÐÐÍê±Ïºó²ÅÖ´ÐÐ");
NSLog(@"%@",[NSThread currentThread]);

});
}

´òÓ¡½á¹û£º

×ܽ᣺¿ªÆô¶àÌõỊ̈߳¬È¥Ö´ÐÐȺ×éÖеÄÈÎÎñ£¬µ±Èº×éÄÚµÄÈý¸öÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÈ¥Ö´ÐÐnotifyÀïÃæµÄÈÎÎñ

´´½¨ÆÁÕÏÏ̶߳ÓÁÐ

/**
* ´´½¨ÆÁÕÏÏ̶߳ÓÁÐ
*/
-(void)barrier {
// ´´½¨Ò»¸ö²¢·¢¶ÓÁÐ
dispatch_queue_t queue = dispatch_queue_create("Mazy", DISPATCH_QUEUE_CONCURRENT);
// ´´½¨ËĸöÒì²½ÈÎÎñ
dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-1 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-2 %@",[NSThread currentThread]);
});

// ´´½¨ÆÁÕÏÏ̶߳ÓÁÐ
dispatch_barrier_async(queue, ^{
NSLog(@"----barrier-----%@", [NSThread currentThread]);
});

dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-3 %@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"ÎÒÊÇÈÎÎñ-4 %@",[NSThread currentThread]);
});
}

´òÓ¡½á¹û£º

×ܽ᣺»áÓÅÏÈÖ´ÐÐÆÁÕÏÇ°ÃæµÄÈÎÎñ£¬µ±ÆÁÕÏǰµÄËùÓÐÈÎÎñÖ´ÐÐÍê±Ïºó£¬ÔÙÈ¥Ö´ÐкóÃæµÄÈÎ

×¢Ò⣺ʹÓÃsyncͬ²½º¯ÊýÍùµ±Ç°´®ÐжÓÁÐÖÐÌí¼ÓÈÎÎñ£¬»á¿¨×¡µ±Ç°µÄ´®ÐжÓÁÐ

   
1724 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ