Example Analysis of Multithreading in iOS
This article shares with you the content of an example analysis of multithreading in iOS. The editor thinks it is very practical, so share it with you as a reference and follow the editor to have a look.
1. Three multithreading technologies of iOS
1 、 NSThread
-advantages: NSThread is lighter and easier to use than the other two
-disadvantages: need to manage thread lifecycle, thread synchronization, locking, sleep, wake up, etc. The locking of data by thread synchronization will have some system overhead.
2 、 NSOperation
You don't need to worry about thread management and data synchronization, you can focus on the operations you need to perform.
3 、 GCD
Based on C language
Basic use basic use of NSThread
Method 1:
/ / block let thread = Thread.init {print ("1,-this is thread\ (Thread.current)")} thread.start ()
Method 2:
/ / SEL let thread2 = Thread.init (target: self, selector: # selector (text), object: nil) thread2.start () @ objc func text () {print ("2,-- this is thread\ (Thread.current)")}
Method 3:\
Self.performSelector (inBackground: # selector (text2), with: nil)
Output
Tips: you can add latency to any thread.
Print (thread.isCancelled) / / whether to cancel print (thread.isExecuting) / / whether to execute print (thread.isFinished) / / whether to complete print (thread.isMainThread) / / whether it is the basic use of the main thread NSOperation
Method 1:
Let queue = OperationQueue.init () / / maximum number of threads queue.maxConcurrentOperationCount = 2 queue.addOperation {sleep (1) print ("1111")} queue.addOperation {print ("2222")}
The output is as follows:
Method 2: priority can be set
Let queue = OperationQueue.init () let op = BlockOperation.init {print ("op")} op.queuePriority = .normal / / set priority queue.addOperation (op) let op2 = BlockOperation.init {print ("op2")} op2.queuePriority = .normal queue.addOperation (op2) queue .addOperation {print ("op3")}
Make a slight modification
Let queue = OperationQueue.init () let op = BlockOperation.init {sleep (1) print ("op")} op.queuePriority = .normal / / set priority queue.addOperation (op) let op2 = BlockOperation.init {sleep (1) print ("op2")} op2.queuePriority =. VeryHigh queue.addOperation (op2) queue.addOperation {print ("op3")}
The output is as follows:
The priorities are as follows:
Basic use of GCD
Method 1: queue.async async
Let queue = DispatchQueue.init (label: "com.zjb.concurrent", attributes: .concurrent) for i in 0.15 {queue.async {sleep (1) print ("this is\ (Thread.current)\ (I)")}}
Method 2: queue.sync synchronization
Let queue = DispatchQueue.init (label: "com.zjb.concurrent", attributes: .concurrent) for i in 0.15 {queue.sync {sleep (1) print ("this is\ (Thread.current)\ (I)")}}
Attach a piece of code on the network
For i in 1.. 10 {DispatchQueue.global (qos: DispatchQoS.QoSClass.default). Async {NSLog ("DispatchQoS.QoSClass.default,% d", I)} DispatchQueue.global (qos: DispatchQoS.QoSClass.background). Async {NSLog ("DispatchQoS.QoSClass.background,% d") I)} DispatchQueue.global (qos: DispatchQoS.QoSClass.unspecified). Async {NSLog ("DispatchQoS.QoSClass.unspecified,% d", I)} DispatchQueue.global (qos: DispatchQoS.QoSClass.userInitiated). Async {NSLog ("DispatchQoS.QoSClass.userInitiated,% d") I)} DispatchQueue.global (qos: DispatchQoS.QoSClass.userInteractive). Async {NSLog ("DispatchQoS.QoSClass.userInteractive,% d", I)} DispatchQueue.global (qos: DispatchQoS.QoSClass.utility). Async {NSLog ("DispatchQoS.QoSClass.utility,% d") I)}}
The highest priority userInteractive and the lowest background
Thank you for reading! This is the end of this article on "sample analysis of multithreading in iOS". I hope the above content can be of some help to you, so that you can learn more knowledge. if you think the article is good, you can share it for more people to see!