2012-03-30 24 views
5

を作成してください。 ..私のコードの場所の束。どうすればスレッドを作成してスレッドに割り当てることができ、それを変数に代入して、コード内で何度も繰り返し使用できます。 NSThread detachNewThreadWithSElectorは、そのセレクタを実行する目的でのみセレクタを作成します。私はスレッドを作成し、何とかそれを使用する必要があります。どのように私は</p> <pre><code>[self performSelector:@selector(doStuff) OnThread:self.myWorkerThread withObject:nil]; </code></pre> <p>...私は私が呼び出すことができるように、メインスレッドではありませんワーカースレッドを作成したい、すぐにセレクタを行うことなく、メインスレッドではありませんNSThread

私はiOSを使用しており、writerThreadですべてのCoreData書き込みを実行する必要があります。私は毎回同じスレッドを使用する必要があります(それはメインスレッドではありません)。

答えて

4

代わりにGrand Central Dispatchを調べることを強くおすすめします:)。 dispatch_queue_createを使用してディスパッチキューを簡単に作成することも、既存の並行スレッドの1つを取得して、必要なものを送信することもできます。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ 
    //Do stuff 
}); 

それとも、そのNSの対応、NSOperationに見ることができます:それはそれは次のようになりますなど、ワークロード/ OSの状態に基づいて適切なスレッド数を、作成します。私はちょうどNSThreadでこれを行う方法を知らない。セレクタを設定する唯一の方法は、それをinitすることです。

EDIT あなただけのスレッドをしたい場合は、単に[[NSThread alloc] init]を呼び出す:P

FURTHER EDIT:この回答を1として iPhone: how to use performSelector:onThread:withObject:waitUntilDone: method?

、セットアップすることは困難になるだろう、すべてのスレッドは、それが作成された時点で「メイン」関数を必要とするため、何もしません。

+0

これはありがとうございます。私は詳細を私の質問に更新しました。 –

+0

私はperformSelectorWithThread場合私の答え – borrrden

+0

を更新しました:..私はそれをallocing後に「スタート」を呼び出すことが、試してみました[[NSThreadのalloc]のinit]フリーズして何もしません:(:[NSThread mainThread]それは罰金が、performSelectorWithThread作品を?。?私は、彼らが唯一の –

2

ブロックを使用するのが最も簡単な方法のようですS:

void (^now)(void) =^{ 
    NSDate *date = [NSDate date]; 
    NSLog(@"The date and time is %@", date); 
}; 

およびコール:

now(); 

NSBlockOperationまたはdispatch_async()。

は、ここで詳細を参照してください。http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1

+0

:それはどのようにNSThread initWithBlockについては何も10.12で –

+1

ませブロックはiOSの上で使用されていませんどのようなSDKを使用している彼らがサポートされているマックではありません... iOSの上だ –

1

あなたが特にコアデータ(あなたの質問が示すように)と対話するためにこれをやっている、とあなたはあなたのアプリケーションのためのiOS 5が必要なことができれば、あなたは新しいプライベートキューを調査する場合がありますiOS 5で追加された管理対象オブジェクトのコンテキストです。スレッド/ディスパッチキューを作成して管理し、それと対話する方法でキューに実行するブロックを送信します。詳細については、the release notesおよびWWDC session videoを参照してください。

アップデート(2016年5月):iOS 5で追加された新しいAPIは-[NSManagedObjectContext initWithConcurrencyType:]でした。 iOS 9以降では、古いイニシャライザと、キューベースの並行処理タイプが導入される前のデフォルトの閉じ込め並行処理タイプは廃止されました。したがって、コンテキストアクセスを管理するためにキューを使用していない場合は、その方向に進むことを強くお勧めします。

開発中は、ルールを破っている場所を見つけやすくするため、using the com.apple.CoreData.ConcurrencyDebug launch argumentを強くお勧めします。

+0

で非常に興味深い - ありがとう –

+0

リンクが死んでいる - 。。。これはあなたの答えにあるリンクからいくつかのコンテンツを含める必要があります理由です –

2

あなたが本当にそれから、これとないGCDを使用したい場合:

NSThread *thr = [[NSThread alloc] initWithTarget:anobject selector:@selector(doStuff) object:nil]; 

そして、あなたはいつでも、これがあなたのオブジェクトの適切なメソッドを呼び出します - しかし、それはNSThreadのdoesnの現在の実装ように私には思えますターゲットとセレクタを変更することを許可しません。

+0

ザッツ後方私が欲しいものを定期的に私はコアデータへの書き込みと私がやりたいです私はperformSelectOnThreadを実行する必要があるので、複数のNSManagedObjectContextsを持つ必要はありません。エドスレッド> –

+0

が見つかりません:\t [thr start]; :) – ingconti

関連する問題

 関連する問題