Bibi's DevLog π€π
[iOS] NSOperation κ³Ό GCD(Grand Central Dispatch), DispatchQueue λ³Έλ¬Έ
[iOS] NSOperation κ³Ό GCD(Grand Central Dispatch), DispatchQueue
λΉλΉ bibi 2022. 3. 25. 12:27[iOS] NSOperation κ³Ό GCD(Grand Central Dispatch), DispatchQueue
iOS μμ μ 곡νλ λ©ν°μ€λ λ©μ μν APIμλ μΈ μ’ λ₯κ° μλ€.
- NSOperation (OperationQueue)
- NSThread (Thread)
- GCD (Grand Central Dispatch) - (DispatchQueue)
NSOperation (NSOperationQueue)
Objective-C κΈ°λ°μ κ³ μμ€ API
- λ΄λΆμ μΌλ‘ C λ‘ κ΅¬νλ GCD λ₯Ό κ³ μμ€ μΈμ΄λ‘ λνν κ².
- μ₯μ ) GCD μ μλ κΈ°λ₯λ€μ μ¬μ©ν μ μμ
- μμ μ·¨μ, μμ μ¬μ¬μ©, KVO λ±
- λ¨μ ) GCD λ³΄λ€ λ¬΄κ²κ³ , μ€λ²ν€λ λ°μ
- λμ λ°©μ :
NSOperation
μNSOperationQueue
μ μΆκ°νμ¬ μ€ν
GCD (Grand Central Dispatch) - DispatchQueue
- λ΄λΆμ μΌλ‘ Cλ‘ κ΅¬νλ¨
- μ₯μ ) NSOperation λ³΄λ€ κ°λ³κ³ μ±λ₯μ΄ μ’μ, ν΄λ‘μ λ‘ κ΅¬νλμ΄ μμ΄ μ½λ κ°λ μ±μ΄ μ’μ, κ°λ¨νκ² μ¬μ© κ°λ₯
- λ¨μ ) λͺλͺ κΈ°λ₯μ μ§μ ꡬνν΄ μ£Όμ΄μΌ ν¨ - μμ μ·¨μ, μμ μ¬μ¬μ©, KVO λ±
- λμ λ°©μ :
DispatchQueue
λ₯Ό μ¬μ©
DispatchQueue
GCD μμ DispatchQueueλ₯Ό ν΅ν΄ μμ μ κ΄λ¦¬νλ€.
β DispatchQueue μλ λ κ°μ§ νμ μ΄ μ‘΄μ¬νλ€. - Serial Queue, Concurrent Queue
- Serial Queue
- μμ μ μμ°¨μ μ²λ¦¬. ν λ²μ νλμ μμ λ§ μ²λ¦¬
- Concurrent Queue
- λμμ μ¬λ¬ κ°μ μμ μ²λ¦¬.
β DispatchQueue λ μ ν리μΌμ΄μ μ€νκ³Ό λμμ 2κ°μ νκ° μλ μμ±λλ€. - Main Queue, Global Queue
Main Queue (Serial Queue)
public class var main: DispatchQueue { get }
λ©μΈ μ€λ λμμ μ¬μ©λλ Queue.
UI κ΄λ ¨ μμ μ μ΄κ³³μμ μ²λ¦¬ν΄μΌ ν¨
Main Queue μ μμ μ μΆκ°νκ³ μΆλ€λ©΄ μλμ κ°μ΄ ν μ μλ€
DispatchQueue.main.async { // μνλ μμ // DispatchQueue μ€ main queue μ async λ‘ μμ μ μΆκ°νκ² λ€λ μλ―Έ. }
Main Queue μλ μ λ Sync Task λ₯Ό μΆκ°ν μ μμ - λ©μΈ μ€λ λκ° Thread-Safe νμ§ μκΈ° λλ¬Έ. (
main.sync
: λ°νμ μλ¬)
Global Queue (Concurrent Queue)
public class func global(qos: DispatchQoS.QoSClass = .default) -> DispatchQueue
νΈμμ μ¬μ©ν μ μκ² λ§λ€μ΄μ Έ μλ Concurrent Queue μ΄λ€.
QoS λ₯Ό μ§μνλ€ : μ°μ μμ(priority)λ₯Ό μ§μ λͺ μν μ μμ
Global Queue μ μμ μ μΆκ°νκ³ μΆλ€λ©΄ μλμ κ°μ΄ ν μ μλ€
DispatchQueue.global().sync { // μνλ μμ // DispatchQueue μ€ global queue μ sync λ‘ μμ μ μΆκ°νκ² λ€λ μλ―Έ } DispatchQueue.global().async { // μνλ μμ // DispatchQueue μ€ global queue μ async λ‘ μμ μ μΆκ°νκ² λ€λ μλ―Έ } DispatchQueue.global(qos: .userInteractive).sync { // μνλ μμ // μ΄μ κ°μ΄ QoS λ₯Ό μ§μ μ§μ ν μλ μλ€. }