Multi-threading and network development for iOS multi-threaded Nsthread
Last Update:2015-07-10
Source: Internet
Author: User
<span id="Label3"></p><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;"></span></span></span><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="font-family: ‘Comic Sans MS‘;">Shimen The main contribution, respect the work of the author, please do not reprint.</span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(119, 119, 119); text-align: center;">If the article is helpful to you, you are welcome to donate to the author, support the Shimen, donate the amount at random, ^_^</span><br></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="text-align: center;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(119, 119, 119);">I want to donate:</span> click Donate</span></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="color: rgb(119, 119, 119); text-align: center;"><span style="font-family: ‘Comic Sans MS‘;">Cocos2d-x source Download: Dot I teleport</span></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119); text-align: center;">Games official Download:</span>HTTP://DWZ.CN/RWTJL</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119);">Game Video Preview:</span>http://dwz.cn/RzHHd</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119);">game development Blog:</span>Http://dwz.cn/RzJzI</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(60, 60, 60); line-height: 26px;"><span style="font-weight: normal;"><span style="color: rgb(119, 119, 119);"><strong>Game Source Transfer</strong></span></span> : Http://dwz.cn/Nret1</span><span style="color: rgb(60, 60, 60);"><span style="max-width: 100%; line-height: 26px;"></span></span></span></p></p><br><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">Basic use of A.nsthread</span></span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">1. Creating and starting Threads</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">A Nsthread object represents a thread<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">creating, Starting Threads<br style="margin: 0px; padding: 0px;">Nsthread *thread = [[nsthread alloc] initwithtarget:self selector: @selector (run) object:nil];<br style="margin: 0px; padding: 0px;">[thread start];<br style="margin: 0px; padding: 0px;">When a thread is started, the Run method of self is executed in threads thread<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Main thread related usage<br style="margin: 0px; padding: 0px;">+ (nsthread *) mainthread; Get the main thread<br style="margin: 0px; padding: 0px;">-(BOOL) ismainthread; is the main thread<br style="margin: 0px; padding: 0px;">+ (BOOL) ismainthread; is the main</span> thread</span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">2. Other Methods</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Get current thread<br style="margin: 0px; padding: 0px;">Nsthread *current = [nsthread currentthread];<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Scheduling Priority for Threads<br style="margin: 0px; padding: 0px;">+ (double) threadpriority;<br style="margin: 0px; padding: 0px;">+ (BOOL) setthreadpriority: (double) p;<br style="margin: 0px; padding: 0px;">-(double) threadpriority;<br style="margin: 0px; padding: 0px;">-(BOOL) setthreadpriority: (double) p;<br style="margin: 0px; padding: 0px;">The scheduling priority value range is 0.0 ~ 1.0, The default 0.5, the higher the value, the higher the priority<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">The name of the thread<br style="margin: 0px; padding: 0px;">-(void) setName: (nsstring *) n;<br style="margin: 0px; padding: 0px;">-(nsstring *) name;</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">3. Other ways to create threads</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">automatically start a thread after creating a thread<br style="margin: 0px; padding: 0px;">[nsthread detachnewthreadselector: @selector (run) totarget:self withobject:nil];<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Implicitly creating and starting a thread<br style="margin: 0px; padding: 0px;">[self performselectorinbackground: @selector (run) withobject:nil];<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Pros and cons of the above 2 ways to create threads<br style="margin: 0px; padding: 0px;">Advantages: Simple and fast<br style="margin: 0px; padding: 0px;">Cons: Unable to set the thread in more detail</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">4. Thread Life cycle</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">5. Control Thread Turntable</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Start thread<br style="margin: 0px; padding: 0px;">-(void) start;<br style="margin: 0px; padding: 0px;">Go to Ready status, run Status. Automatically enters the death state when the thread task is completed<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Blocking (pausing) Threads<br style="margin: 0px; padding: 0px;">+ (void) sleepuntildate: (nsdate *) date;<br style="margin: 0px; padding: 0px;">+ (void) sleepfortimeinterval: (nstimeinterval) ti;<br style="margin: 0px; padding: 0px;">Enter blocking state<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Force Stop Thread<br style="margin: 0px; padding: 0px;">+ (void) exit;<br style="margin: 0px; padding: 0px;">Into the state of death<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Note: once the thread has stopped (dead), it cannot be opened Again.</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">6. Multi-threaded Security Risks</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Resource sharing<br style="margin: 0px; padding: 0px;">1 of resources may be shared by multiple threads, that is, multiple threads may access the same block of resources<br style="margin: 0px; padding: 0px;">For example, multiple threads access the same object, the same variable, the same file<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Data confusion and data security issues can easily arise when multiple threads access the same resource</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">7. Mutex (to prevent multi-threaded resource Looting)</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><span style="margin: 0px; padding: 0px;">(1) the use of the mutex lock format</span><br style="margin: 0px; padding: 0px;">@synchronized (lock Object) {//code to be locked}<br style="margin: 0px; padding: 0px;">Note: locking 1 parts of code with only 1 locks, with multiple locks is not valid<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Advantages and disadvantages of mutual exclusion lock<br style="margin: 0px; padding: 0px;">Advantages: it can effectively prevent the data security problem caused by multi-thread snatch resource<br style="margin: 0px; padding: 0px;">Cons: consumes a lot of CPU resources<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Use of mutexes: multiple threads rob the same piece of resources<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Related professional terminology: thread synchronization<br style="margin: 0px; padding: 0px;">Thread synchronization means that multiple threads perform tasks sequentially<br style="margin: 0px; padding: 0px;">Mutex is the use of thread synchronization technology</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">(2) Locking @synchronized</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">@property (nonatomic, Strong) nsobject *lock;</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Self.lock = [[nsobject alloc] init]</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">@synchronized (self.lock) {</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">...</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">}</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">note: to use the same "lock" to properly lock code resources</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">advantages: effectively prevent multi-thread snatch resources</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Cons: consumes a lot of CPU resources</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">in fact, the member property modifier Atomic lock, which is the default</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">so we generally use nonatomic to improve performance</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">try to avoid multi-thread snatch resources</span></span><span style="font-family:Comic Sans MS;font-size:18px;">if <span style="font-family:Comic Sans MS;font-size:18px;">possible, dispose of the looting resources to the server Side.</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">(3) about atomic and nonatomic modifiers</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">OC has nonatomic and atomic two choices when defining attributes<br style="margin: 0px; padding: 0px;">Atomic: Atomic attribute, locking for Setter method (default is Atomic)<br style="margin: 0px; padding: 0px;">Nonatomic: non-atomic attribute, does not lock the setter method<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Atomic Plus Lock principle<br style="margin: 0px; padding: 0px;">@property (assign, Atomic) int age;<br style="margin: 0px; padding: 0px;">-(void) Setage: (int) Age<br style="margin: 0px; padding: 0px;">{<br style="margin: 0px; padding: 0px;">@synchronized (self) {<br style="margin: 0px; padding: 0px;">_age = age;<br style="margin: 0px; padding: 0px;">}<br style="margin: 0px; padding: 0px;">}</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">(4) Atomic vs nonatomic</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">Comparison of Nonatomic and atomic<br style="margin: 0px; padding: 0px;">Atomic: thread-safe, requires a lot of resources<br style="margin: 0px; padding: 0px;">Nonatomic: non-thread-safe, suitable for small memory mobile devices<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Recommendations for iOS development<br style="margin: 0px; padding: 0px;">All properties are declared as Nonatomic<br style="margin: 0px; padding: 0px;">Try to avoid multiple threads robbing the same piece of resources<br style="margin: 0px; padding: 0px;">As far as possible to locking, resource-grabbing business logic to the Server-side processing, reduce the pressure of mobile clients</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"> </span></span><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="font-family:Comic Sans MS;font-size:18px;">8. Inter-thread Communication</span></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">What is called Inter-thread communication<br style="margin: 0px; padding: 0px;">In 1 processes, threads often do not exist in isolation and require frequent communication between multiple threads<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">The embodiment of inter-thread communication<br style="margin: 0px; padding: 0px;">1 Threads pass data to another 1 threads<br style="margin: 0px; padding: 0px;">After performing a specific task in 1 threads, go to another 1 thread to continue the task<br style="margin: 0px; padding: 0px;"><br style="margin: 0px; padding: 0px;">Common methods for inter-thread communication<br style="margin: 0px; padding: 0px;">-(void) performselectoronmainthread: (SEL) aselector withobject: (id) arg waituntildone: (BOOL) wait;<br style="margin: 0px; padding: 0px;">-(void) performselector: (SEL) aselector onthread: (nsthread *) thr withobject: (id) arg waituntildone: (BOOL) wait;</span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><br></span></span><span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"></span></span><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="font-family: ‘Comic Sans MS‘;">Shimen The main contribution, respect the work of the author, please do not reprint.</span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(119, 119, 119); text-align: center;">If the article is helpful to you, you are welcome to donate to the author, support the Shimen, donate the amount at random, ^_^</span><br></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="text-align: center;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(119, 119, 119);">I want to donate:</span> click Donate</span></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="line-height: 26px;"><span style="color: rgb(119, 119, 119); text-align: center;"><span style="font-family: ‘Comic Sans MS‘;">Cocos2d-x source Download: Dot I teleport</span></span></span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119); text-align: center;">Games official Download:</span>HTTP://DWZ.CN/RWTJL</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119);">Game Video Preview:</span>http://dwz.cn/RzHHd</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="line-height: 26px; color: rgb(119, 119, 119);">game development Blog:</span>Http://dwz.cn/RzJzI</span></p></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-bottom: 5px; color: rgb(92, 92, 92); background-color: rgb(245, 245, 245); line-height: 28px; border: 0px; text-indent: 22px;"><span style="font-family: ‘Comic Sans MS‘;"><span style="color: rgb(60, 60, 60); line-height: 26px;"><span style="font-weight: normal;"><span style="color: rgb(119, 119, 119);"><strong>Game Source Transfer</strong></span></span> : Http://dwz.cn/Nret1</span><span style="color: rgb(60, 60, 60);"><span style="max-width: 100%; line-height: 26px;"></span></span></span></p></p> <p style="font-size:12px;"><p style="font-size:12px;">Copyright Notice: This article for Bo Master original article, without Bo Master permission not Reproduced.</p></p> <p><p> Multithreaded Nsthread for iOS multi-threading and network development </p> </p></span>