NSRunLoopのrunMode:beforeDate:がわからん。
以下のコード。
NSLog(@"start stage"); UIView *view; //view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; view = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 240)]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:5.0f]; BOOL flag = [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:date]; NSLog(@"next stage: %d", flag); [view release];
UIView の生成だとちゃんと5秒待ってくれるのに、UIWebViewの生成だと待ってくれない(謎)
指定されたモードの入力ソースの期限が 全て切れている場合は、ループを実行せずにNOを返します。 それ以外はYESを返します。
oomori.com - このウェブサイトは販売用です! - oomori リソースおよび情報より引用
とのことなので、「入力ソースの期限が切れて」いる状態なのだろう。flagの値もNOになってるし。
NSRunLoopとスレッドの関係ももうちょっと正確に把握したいところ。
とりあえず今日勉強会で崎さんから教えて頂いた、処理待ちに使うのを覚えとこう。。
objective c - Best way to make NSRunLoop wait for a flag to be set? - Stack Overflow