2016-05-19 6 views
0

私のiOSアプリケーションは、一部のコンピューティングにC関数を使用しています。 - (void)viewDidLoadから呼び出したいですが、メインスレッドをフリーズさせたくありません。私はdispatch_async(dispatch_get_main_queue ...ブロックで呼び出すことを試みたが、それでもメインスレッドで呼び出されていた。objective-cメソッドへの関数呼び出しも含めて[self performSelector:InBackground]を呼び出すこともできなかった。そこに私はObjective-CのアプリでバックグラウンドでC関数を実行することができます任意の方法objective-cメソッドからC関数を非同期的にディスパッチする方法

+2

'dispatch_get_main_queue()'が問題です。別のキューを使用する必要があります。 – Sulthan

+0

あなたはアップルのスレッディングガイドを読むべきです。バックグラウンドで実行したい場合は、メインスレッドに何かを置くのは意味がありません。また、performSelectorInBackground:は動作します(これを使用するには、CコードをObj-C関数でカプセル化する必要があります)。 – Eiko

+0

はい、それをバックグラウンドキューに入れました。しかし、performSelectorInBackgroundは、objcメソッドでカプセル化された関数では機能しませんでした。 –

答えて

2

あなたは例えば、異なるキューを使用する必要があります?。

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

dispatch_async(backgroundQueue, ^{ 
    // do something 
}); 

は詳細についてはDispatch Queuesを参照してください

+0

それをカスタムキューにディスパッチしました。ありがとうございました。 –

0

かのことができます。それをobj-cメソッドに入れ、以下を使って呼び出してください:

[NSThread detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument]; 
関連する問題