-1

私は iOS が初めてで、無限ループで Iphone 画面に出力を表示する方法についてフィードバックが必要です。

ボタンが押されると、アプリケーションは無限ループに入り、いくつかの出力を作成します。これらの出力をiPhoneの画面に表示したいと思います。デバッグ画面でprintfからこれらの値を取得しますが、iPhone画面には何も表示されません。無限ループなしでこの関数を試すと、画面に出力が表示されますが、アプリケーションは無限ループで実行する必要があります。

私はプログラミングにまったく慣れていないので、アプリケーションをマルチスレッド モードで実行する必要がありますか?

コードは以下のとおりです。

-(IBAction)button:(UIButton *)sender{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

        int output = -1;

        while (pool) {

            //output is received

            if((output != -1) ) {

                printf("%i \n", output); // the output is seen on debug screen

                self.display.text = [NSString stringWithFormat:@"%i",output]; // the outputs is not shown on iphone

                //[pool release];

            }
        }
    }
4

2 に答える 2

1

output の値を変更していないため、ループに入っても決して変更されません。

アプリはすでにマルチスレッド化されており、それ以外の方法はありません。バックグラウンド タスクについて話している可能性があります ( http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

別のスレッドを使用する必要があるかどうかは、ループがどのように制御されているかによって異なります。重い作業や大きな数は、次のような方法でメイン スレッドから削除する必要があります。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //My background stuff

    dispatch_async(dispatch_get_main_queue(), ^{
        //My ui code
    });
});

スレッドに関しては、GCD の使い方は非常に簡単です: ( https://developer.apple.com/library/mac/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html ) - GCD に関するチュートリアルはたくさんあります。

于 2013-04-09T13:24:56.863 に答える
0

問題は、テキストがすばやく変更され、出力が表示されないことだと思います。

これを試して、何が得られるか教えてください。

self.display.text = [NSString stringWithFormat:@"%@%i",self.display.text, output];
于 2013-04-09T13:36:30.647 に答える