1

I'm using a serial cable bought from RedPark(ios device to RS232) for my first project. I already got it to work by sending and receiving data.(Not too far yet.) How I want my app to work is iphone acts as Master in the communication by sending commands and external device reply with the data required.

And lots of times, I need to ask for several data package at a same time.

I ran into a problem that is the readByteAvaible() provided by RedPark, event driven, So I can't send several commands together in viewDidLoad or other methods. I've tried different ways to get all the packages I need. Like multithread. None of them works. From the library FAQ, it's said "you must be returned to your run loop before these are processed".

I'm still fairly new to objective C, and still feel a little confused. Can anyone tell me how to achieve this? Or maybe some information about main run loop of objective C?

4

1 に答える 1

1

実行ループはイベント ループの Cocoa バージョンです。つまり、やるべきことの単なるキューです。Objective-C は動的であるため、リストはターゲットおよびセレクターになる傾向があります。これは、Win32 や Mac Classic Toolbox などの古い純粋に静的なランタイムの 1 つとは異なり、メッセージ構造体を待機してから、メッセージ タイプに基づいて精巧なブランチに入る必要があります。

実行ループとスレッドは 1 対 1 の関係にあり、メインの実行ループはメイン スレッドで実行されるループです。

全体として、何も考えなければ、すべてのコードがメインの実行ループで発生します。これは、すべてのコントロールを提供する UIKit がメインの実行ループでのみ機能するためです。

したがって、UIButton があり、didPressButton:thenを呼び出すように配線されているとします。

- (IBAction)didPressButton:(id)sender
{
    // this code is running on the main run loop

    NSLog(@"I'm executing on the main run loop");

    // when this method ends, control will return to the run loop
}

あなたはおそらくマルチスレッドを望んでおらず、おそらく実行ループでスケジュールしたいだけです。

メソッドを使用してperformSelectorOnMainThread:、どこからでもメインの実行ループで何かをスケジュールできます。すでにメイン スレッドを使用している場合はperformSelector:withObject:afterDelay:、メインの実行ループで何かが発生するようにスケジュールするために使用できます。次に発生させるために 0.0 の遅延を渡すことができますが、次に発生するように既にスケジュールされているものを実行する機会を与えることもできます。

RedPark の SDK は、電子メール アドレスを渡して初めて利用できるようになるので、私はそれを断りました。それがどのように定式化されているかについて、さらに詳しい情報を教えていただけますか? ブロックか、コールバックか、デリゲートか、それとも何か他のものですか?

于 2012-10-02T22:18:27.907 に答える