Android では、他のコードからメイン スレッドでコードを実行する方法がいくつかあります。
1. Activity.runOnUiThread(Runnable r)
2. new Handler.post(Runnable r);
3. View.post
iOSの類似物は何ですか?
dispatch_async(dispatch_get_main_queue(), ^{
});
他の何か?
前もって感謝します。
Android では、他のコードからメイン スレッドでコードを実行する方法がいくつかあります。
1. Activity.runOnUiThread(Runnable r)
2. new Handler.post(Runnable r);
3. View.post
iOSの類似物は何ですか?
dispatch_async(dispatch_get_main_queue(), ^{
});
他の何か?
前もって感謝します。
最近の好ましい方法は、質問で引用したコードを使用してGCDを使用することです。
dispatch_async(dispatch_get_main_queue(), ^{
// Your code to run on the main queue/thread
});
GCDよりもオブジェクト指向のアプローチを使用したい場合は、NSOperation
(のようなNSBlockOperation
)を使用してそれをに追加することもできます[NSOperationQueue mainQueue]
。
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// Your code to run on the main queue/thread
}];
これはとまったく同じことをdispatch_async(dispatch_get_main_queue(), …)
行い、プレーンCGCD関数よりもObjective-C/POO指向であるという利点がありNSOperation
ますが、オブジェクトを作成するためにメモリを割り当てる必要があるという欠点がありますが、プレーンCとGCD。
GCDを使用することをお勧めしますが、メインスレッドから特定のオブジェクトのセレクター(メソッド)を呼び出すことができる2つの方法のように、他の方法もあります。
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
(NSObjectのメソッドであるため、任意のオブジェクトで呼び出すことができます)- (void)performSelector:(SEL)aSelector target:(id)target argument:(id)anArgument order:(NSUInteger)order modes:(NSArray *)modes
します[NSRunLoop mainRunLoop]
ただし、これらのソリューションは、NSOperation
既存のメソッドを呼び出すことしかできないため(したがって、オブジェクトにはすでに存在し、実行したいことを実行するメソッドが必要です)、GCDや-[NSOperationQueue addOperationWithBlock:]
任意のメソッドを渡すことができるため、GCDやソリューションほど柔軟ではありません。コード(ブロックを使用)。