iOS OS X 和 iOS 中的多线程技术-2 (performSelectors)

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄

一、performSelectors(执行选择器)

NSObject 提供了以 performSelector 为前缀的一系列方法。它们可以让用户在指定线程中,或者立即,或者延迟执行某个方法调用。这个方法给了用户实现多线程编程最简单的方法。

下面有一些例子:

1.在当前线程中执行方法:

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument

afterDelay:(NSTimeInterval)delay

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:

(NSTimeInterval)delay inModes:(NSArray *)modes

2.在指定线程中执行方法:

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thread

withObject:(id)arg waitUntilDone:(BOOL)wait

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thread withObject:

(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array

3.在主线程中执行方法:

- (void)performSelectorOnMainThread: (SEL)selector withObject:(id)argument

waitUntilDone:(BOOL)wait

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg

waitUntilDone:(BOOL)wait modes:(NSArray *)array

4.在后台线程中执行方法:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

这一系列方法简单易用,但只提供了有限的几个选择:指定执行的方法(但传入方法的参数数量有限制);指定是在当前线程,还是在主线程,还是在后台线程执行;指定是否需要阻塞当前线程等待结果。

例如,以下代码使得方法 foo: 在一个新的后台线程执行,并传入了 object 参数:

SEL selector = @selector(foo:);

[self performSelectorInBackground:selector withObject:object];

以下代码使得 updateUI 方法在主线程内得到执行,并且当前线程会被阻塞,直到主线程执行完该函数:

[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:YES];

谢谢!!!

你可能感兴趣的:(iOS OS X 和 iOS 中的多线程技术-2 (performSelectors))