>>672
> NSTimer は NSRunLoop 内でってことなんだから、定期的に NSRunLoop 呼びださなきゃダメやん

定期的にNSRunLoopを呼ぶよりは、そのループ処理そのものを一つのタスクとしてNSRunLoopにスケジュールした方がいい。
そして、自身のタスクを再帰呼び出ししてループする

- (void)Looping:(id)arg
{
// ループ処理
[[NSRunLoop currentRunLoop] performSelector:@selector(Looping:) target:self argument:arg order:1 modes:@[NSDefaultRunLoopMode]];
}

タイマー処理で、上記のLooping:のスケジュールをキャンセルすれば処理終了