การเรียก API แบบอะซิงโครนัส (แยกวิเคราะห์) เพียงแค่ใช้ GCD หรือไม่ ไอโอเอส

เหมือนชื่อเรื่องถาม...

การเรียก Asynchronous API เช่นเดียวกับใน Parse API สำหรับ iOS เพียงแค่วางการเรียกนั้นในเธรดใหม่ (โดยใช้ GCD) เพื่อให้มัน "อยู่ในเบื้องหลัง" หรือไม่

หากเป็นกรณีนี้ ฉันจะถือว่าการเรียก API แบบซิงโครนัสยังคงอยู่ในเธรดปัจจุบัน

ขอบคุณ!


person justColbs    schedule 26.08.2015    source แหล่งที่มา


คำตอบ (4)


tl;dr ขึ้นอยู่กับนักพัฒนาโดยมีข้อยกเว้นบางประการ

ก่อนอื่น คุณไม่ได้ควบคุมเธรดผ่าน GCD แต่คุณกำลังวางงานไว้ในคิว

Grand Central Dispatch (GCD) เป็นเทคโนโลยีที่พัฒนาโดย Apple Inc. เพื่อเพิ่มประสิทธิภาพการรองรับแอปพลิเคชันสำหรับระบบที่มีโปรเซสเซอร์แบบมัลติคอร์และระบบมัลติโปรเซสเซอร์แบบสมมาตรอื่น ๆ เป็นการดำเนินการงานแบบขนานตามรูปแบบเธรดพูล แนวคิดพื้นฐานคือการย้ายการจัดการเธรดพูลออกจากมือของนักพัฒนา และใกล้กับระบบปฏิบัติการมากขึ้น นักพัฒนาแทรก "แพ็คเกจงาน" ลงในพูลโดยไม่สนใจสถาปัตยกรรมของพูล โมเดลนี้ปรับปรุงความเรียบง่าย พกพาสะดวก และประสิทธิภาพ1

ประการที่สอง คุณหมายถึงอะไรโดย API ฉันคิดว่าคุณต้องการพูดว่า REST API สมมติฐานอีกประการหนึ่งคือ คุณหมายถึง SDK ดั้งเดิม สำหรับบริการ REST API เพราะหากคุณใช้งานด้วยตัวเองผ่านไลบรารีเครือข่าย คุณจะต้องรับผิดชอบในเรื่องนี้ ดังที่ฉันเห็นจากประสบการณ์กว่า 3 ปีของฉัน ใน iOS การเรียกไปยังวิธีการใดๆ ทั้งหมดเป็นแบบซิงโครนัสตามค่าเริ่มต้น เป็นความรับผิดชอบของนักพัฒนาที่จะวางการเรียกเหล่านั้นไปยังคิวอื่นผ่าน GCD หรือ NSOperationQueue หรืออะไรก็ตาม

โปรดอย่าสับสนกับการมีอยู่ของอาร์กิวเมนต์บล็อกที่สมบูรณ์เมื่อสิ้นสุดการเรียก API ในกรณีทั่วไป คุณยังต้องรับผิดชอบในการตรวจสอบให้แน่ใจว่าการอัปเดต UI ใดๆ เกิดขึ้นในคิวหลัก เนื่องจากโดยค่าเริ่มต้น บล็อกนี้จะไม่อยู่ในคิวหลัก คุณอาจต้องการจัดการข้อมูลบางอย่าง คุณได้รับจากเซิร์ฟเวอร์ เช่น จัดเรียง แปลงเป็นประเภทอื่น ฯลฯ

มีข้อยกเว้นเพียงไม่กี่ประการของ SDK ที่วางบล็อกการดำเนินการทั้งหมดไว้ในคิวหลัก เช่น AFNetworking หรือแยกวิเคราะห์ แต่ในกรณีนี้ผู้จำหน่าย SDK จะให้ข้อมูลเกี่ยวกับลักษณะการทำงานนี้

person Yurii Kolesnykov    schedule 26.08.2015

ฉันเชื่อว่าจะใช้ลำดับความสำคัญหรือคิวการดำเนินการเดียวกันกับการโทร ตัวอย่างเช่น เมื่อทำการเรียก Parse API บนเธรดหลัก คุณมักจะได้รับคำเตือนเกี่ยวกับการดำเนินการที่ยาวนานของเธรดหลัก

ฉันไม่คิดว่านี่เป็นกรณีของการเรียก API ทั้งหมด เนื่องจากไลบรารี wrapper รอบการเรียก api อาจใช้คิวการดำเนินการส่วนตัวของตัวเองในบางกรณี

person Lytic    schedule 26.08.2015

ไม่จำเป็น. อาจอยู่ในคิวการดำเนินการอื่นที่มีลำดับความสำคัญในการจัดส่งต่างกัน

person Saleh Albuga    schedule 26.08.2015

มันจะอยู่ในเธรดอื่นตามที่เห็นในโค้ดโอเพ่นซอร์ส มันใช้การล็อคและแท็ก @synchronize เพื่อให้แน่ใจว่าทุกอย่างจะมาบรรจบกันในท้ายที่สุดสำหรับบล็อก ฯลฯ

person AlexKoren    schedule 26.08.2015