BOOL )application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions |
02 |
{ |
03 |
self.window
= [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; |
04 |
|
05 |
//创建线程的第一种方式 |
06 |
NSThread
* thread =
[[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@ "universe" ]; |
07 |
[ thread start]; |
08 |
[ thread release]; |
09 |
|
10 |
|
11 |
//创建线程的第二种方式,NSThread类方法 |
12 |
[NSThread
detachNewThreadSelector:@selector(run:) toTarget:self withObject:@ "yuzhou" ]; |
13 |
|
14 |
|
15 |
//创建线程的第三种方法
NSObject方法 |
16 |
[self
performSelectorInBackground:@selector(run:) withObject:@ "nsobject
thread" ]; |
17 |
|
18 |
//创建线程的第四种方式 |
19 |
NSOperationQueue
*oprationQueue = [[NSOperationQueue alloc] init]; |
20 |
[oprationQueue
addOperationWithBlock:^{ |
21 |
//这个block语句块在子线程中执行 |
22 |
NSLog(@ "oprationQueue" ); |
23 |
}]; |
24 |
[oprationQueue
release]; |
25 |
|
26 |
//第五种创建线程的方式 |
27 |
NSOperationQueue
*oprationQueue1 = [[NSOperationQueue alloc] init]; |
28 |
oprationQueue1.maxConcurrentOperationCount
= 1; //指定池子的并发数 |
29 |
|
30 |
//NSOperation
相当于java中的runnable接口,继承自它的就相当一个任务 |
31 |
NSInvocationOperation
*invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run:) object:@ "invation" ]; |
32 |
[oprationQueue1
addOperation:invation]; //将任务添加到池子里面,可以给池子添加多个任务,并且指定它的并发数 |
33 |
[invation
release]; |
34 |
|
35 |
//第二个任务 |
36 |
NSInvocationOperation
*invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2:) object:@ "invocation2" ]; |
37 |
invation2.queuePriority
= NSOperationQueuePriorityHigh; //设置线程优先级 |
38 |
[oprationQueue1
addOperation:invation2]; |
39 |
[invation2
release]; |
40 |
|
41 |
[oprationQueue1
release]; |
42 |
|
43 |
//调用主线程,用来子线程和主线程交互,最后面的那个boolean参数,如果为yes就是等这个方法执行完了在执行后面的代码;如果为no的话,就是不管这个方法执行完了没有,接着往下走 |
44 |
[self
performSelectorOnMainThread:@selector(onMain) withObject:self waitUntilDone:YES]; |
45 |
|
46 |
//---------------------GCD----------------------支持多核,高效率的多线程技术 |
47 |
//创建多线程第六种方式 |
48 |
dispatch_queue_t
queue = dispatch_queue_create( "name" ,
NULL); |
49 |
//创建一个子线程 |
50 |
dispatch_async(queue,
^{ |
51 |
//
子线程code... .. |
52 |
NSLog(@ "GCD多线程" ); |
53 |
|
54 |
//回到主线程 |
55 |
dispatch_sync(dispatch_get_main_queue(),
^{ //其实这个也是在子线程中执行的,只是把它放到了主线程的队列中 |
56 |
Boolean
isMain = [NSThread isMainThread]; |
57 |
if (isMain)
{ |
58 |
NSLog(@ "GCD主线程" ); |
59 |
} |
60 |
}); |
61 |
}); |
62 |
|
63 |
|
64 |
self.window.backgroundColor
= [UIColor whiteColor]; |
65 |
[self.window
makeKeyAndVisible]; |
66 |
return YES; |
67 |
} |
68 |
69 |
-
( void )onMain |
70 |
{ |
71 |
Boolean
b = [NSThread isMainThread]; |
72 |
if (b)
{ |
73 |
NSLog(@ "onMain;;%d" ,b); |
74 |
} |
75 |
} |
76 |
77 |
78 |
-
( void )
run:(NSString*)str |
79 |
{ |
80 |
NSLog(@ "多线程运行:::%@" ,str); |
81 |
} |
82 |
-
( void )
run2:(NSString*)str |
83 |
{ |
84 |
NSLog(@ "多线程运行:::%@" ,str); |
85 |
} |