Dispatch main async swift 4 hướng dẫn
Show Đã đăng vào thg 3 20, 2020 5:08 CH 2 phút đọc Chào các bạn, hôm nay mình sẽ viết về Dispatch group trong Swift. Dispatch group cho phép nhóm nhiều task vụ với nhau và chờ cho chúng hoàn thành hoặc nhận thông báo khi chúng hoàn thành mới thực hiện tiếp login của bạn. Những task vụ này có thể chạy đồng bộ hoặc bất đồng bộ và có thể chạy trên nhiều queue khác nhau. Ví dụ: khi open 1 màn hình, bạn cần phải call nhiều api để lấy dữ liệu, sau khi hoàn thành call tất cả api này mới update data lên giao diện. Dispatch group cung cấp hàm wait() , hàm này block thread hiện tại cho tới khi các task vụ trong group được hoàn thành. Cách sử dụng dispath group như sau:
Giải thích:
Việc sử dụng wait() không phải là giải pháp tốt vì phải block thread hiện tại. Có 1 cách tốt hơn đó là dispatch group có thể thông báo cho bạn biết khi nào các task vụ trong group hoàn thành. Mình thay đổi đoạn code trên như sau:
Trong lần implement này, mình không cần đặt đoạn code trong background queue vì dùng notify không block thread hiện tại.
Hi vọng bài viết có thể giúp ích cho các bạn khi tìm hiểu về dispath group. Cảm ơn các bạn đã đọc bài viết All rights reserved Đã đăng vào thg 10 21, 2020 2:34 SA 5 phút đọc Threading trong lập trình iOS là một khái niệm khá khó để tiếp cận cho những người mới khi bắt đầu làm quen với Swift và iOS. Dưới đây là 1 vài mẹo nhỏ để bạn có thể hiểu dễ dàng, cơ bản khi tiếp xúc với Threading thông qua GCD(Grand Central Dispatch)
1. Chỉ sử dụng Main Thread cho việc update các viewsĐây là cách đơn giản nhất để tránh các sự cố không ngờ tới. Bạn phải chắc chắn rằng các views và giao diện của bạn không bị blocked (hiểu như không bị ảnh hưởng) bởi những việc khác trên Main Queue. Dưới đây là vd nè:
Bằng việc chỉ update các UI qua Main Thread, bạn sẽ chắc chắn rằng user sẽ không bị blocked từ việc load 1 cái gì đó hay vâng vâng mây mây. Luôn luôn tránh việc gọi các function có thể gây ảnh hưởng như load data, hình ảnh, trên Main Thread. 2. Hiểu các độ ưu tiên (QoS) trong GCDApple cung cấp cho chúng ta một vài độ ưu tiên để gắn cho sự kiện trong iOS. Những sự kiên có độ ưu tiên cao hơn sẽ được thực thi ngay lặp tức trong khi những độ ưu tiên thấp hơn sẽ được thực thi khi mà hệ thống đã được giải phóng 1 tí tài nguyền. Dưới đây là bảng độ ưu tiên từ cao tới thấp tôi lấy
từ document của Apple
Việc tạo queue với độ ưu tiên cũng khá dễ dàng. Bạn chỉ cần truyền tham số cho label hiểu như là tên của queue và độ ưu tiên bạn muốn là xong
3. Nắm rõ bạn đang ở thread nàoĐể biết bạn đang ở thread nào thì chỉ đặt dòng log
Với cách này
thì bạn có thể thấy chính xác độ ưu tiên của function đang chạy. Ngoài ra thì bạn còn có thể check bạn có đang ở trên Main Thread không bằng cách log 4. Xác định trong đầu gần như lúc nào cũng nên xài asyncĐây là 1 trong những cách tốt nhất để tránh vấn đề khi dùng threading nhưng nhiều lúc nó cũng có tác dụng phụ. Có rất nhiều lợi ích khi bạn dùng KHÔNG BAO GIỜ được gọi sync ở Main DispatchQueue:
Và 1 lưu ý nhỏ nữa là nên tránh dùng 5. Một vài trang khá hay để bạn tìm hiểu về Threading:
Cám ơn các bạn đã theo dõi. Nguồn bài viết: https://medium.com/@gabriel_lewis/threading-in-swift-simply-explained-5c8dd680b9b2 All rights reserved |