色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>java源碼下載>

Runloop是怎樣進行線程保活

大?。?/span>0.3 MB 人氣: 2017-09-26 需要積分:1

  AFN 中的實現

  在舊版本的AFN 中使用了 NSURLConnection 來發起并處理網絡連接。

  AFN 的做法是把網絡請求的發起和解析都放在同一個子線程中進行,子線程默認不開啟 runloop,它會向一個 C語言程序那樣在運行完所有代碼后退出線程。

  而網絡請求是異步的,這導致獲取到請求數據時,線程已經退出,代理方法沒有機會執行。

  因此,AFN 的做法是使用一個 runloop 來保證線程不死,也就是下面這段被講爛了的代碼:

  + (void)networkRequestThreadEntryPoint:(id)__unused object {

  @autoreleasepool {

 ?。郏跱SThread currentThread] setName:@“AFNetworking”];

  NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

 ?。踨unLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

 ?。踨unLoop run];

  }

  }

  稍微結合一下上下文,看看這個方法在哪里被調用:

  + (NSThread *)networkRequestThread {

  static NSThread *_networkRequestThread = nil;

  static dispatch_once_t oncePredicate;

  dispatch_once(&oncePredicate, ^{

  _networkRequestThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkRequestThreadEntryPoint:) object:nil];

 ?。踎networkRequestThread start];

  });

  return _networkRequestThread;

  }

  似乎這種寫法提供了一種思路:“如果需要在子線程中異步執行操作,可以利用 runloop 進行線程保活”。但準確的來說,AFN 的這種寫法并不能實現我們的需求,它只是在 AFN 這個特殊場景下可以工作。

  NSThread 與內存泄漏

  這種寫法的第一個問題就是存在內存泄漏。我們構造以下用例,把 AFN 的線程創建放在一個循環里:

  - (void)memoryTest {

  for (int i = 0; i 《 100000; ++i) {

  NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

 ?。踭hread start];

  }

  }

  - (void)run {

  @autoreleasepool {

  NSLog(@“current thread = %@”, [NSThread currentThread]);

  NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

  if (!self.emptyPort) {

  self.emptyPort = [NSMachPort port];

  }

 ?。踨unLoop addPort:self.emptyPort forMode:NSDefaultRunLoopMode];

  [runLoop run];

  }

  }

  奇怪的事情出現了,盡管是在 ARC 環境下,內存依然不停的上漲。如果我們把 run 方法中和 runloop 相關的代碼刪除則不會出現上述問題,顯然,開啟 runloop 導致了內存泄漏,也就是 thread 對象無法釋放。

非常好我支持^.^

(1) 100%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 色偷偷超碰97人人澡人人| sihu国产精品永久免费| 日韩精品a在线视频| 毛片免费观看| 久久青草免费91线频观看站街| 囯产精品久久久久久久久蜜桃| 99久久综合国产精品免费| 夜夜草导航| 夜夜国产亚洲视频香蕉| 亚洲伊人色综合久久天天伊人| 小sao货ji巴cao死你视频| 日本护士在线观看| 挠黑色超薄丝袜脚心vk40分钟| 久久涩视频| 老头操美女| 中文中幕无码亚洲在线| 亚洲风情无码免费视频| 亚洲高清在线mv| 亚洲一区二区女搞男| 孕妇泬出白浆18P| 亚洲无吗视频| 永久免费毛片| 91原创在线| 俄罗斯兽交XXXXX在线| 国产欧美另类久久久品| 精品亚洲一区二区在线播放| 久久国产av偷拍在线| 免费高清毛片| 特污兔午夜影视院| 艳鉧动漫1~6全集观看在线| 131美女爱做视频午夜剧场| china18一19 第一次| 国产精品视频人人做人人爽| 久久99re8热在线播放| 男女无遮挡吃奶gift动态图| 日韩欧美一区二区中文字幕| 亚洲精品视频久久| CHINESE熟女老女人HD视频| 岛国片免费看| 久久这里只精品热在线18| 日本十八禁无遮无挡漫画|