在没有第二个线程的情况下调用objective-c中延迟的函数

Posted

技术标签:

【中文标题】在没有第二个线程的情况下调用objective-c中延迟的函数【英文标题】:Calling a function delayed in objective-c without a 2nd thread 【发布时间】:2011-04-04 18:49:12 【问题描述】:

我想调用一个函数,即延迟发送一个句子,以模拟数据流。数据存储在文本文件中。文本文件的每一行都包含一个句子。我试图通过使用 sleep(x) 来获得延迟调用行为,但这冻结了整个应用程序。我是否必须使用单独的线程,或者是否可以让它与 NSTimer 或 sth 一起使用。像 [self performSelector:@selector(parseSentence:) withObject:s afterDelay:2] ?

- (void) 模拟流 NSArray *句子; NSString *path = [[NSBundle mainBundle] pathForResource:@"Sentence_File" ofType:@"txt"]; NSString *st; if (path) st=[NSString stringWithContentsOfFile:pfad encoding:NSUTF8StringEncoding error:nil]; sentences=[[st substringFromIndex:[st rangeOfString:@"$"].location+1] componentsSeparatedByString:@"$"]; for(int i=0; i<[sentences count]; i++) //----CALL THIS WITH A DELAY OF 2 SECONDS---- [sentenceHandler parseSentence:[sentences objectAtIndex:i]];

感谢您的帮助。问候

【问题讨论】:

-performSelector:withObject:afterDelay: 有什么问题? 感谢您的评论。请看我的“答案” 【参考方案1】:

您可以增加每次传递的延迟间隔:

NSTimeInterval delay = 2;
for (NSString* sentence in sentences) 
   [sentenceHandler performSelector:@selector(parseSentence:)
                         withObject:sentence
                         afterDelay:delay];
   delay += 2;

【讨论】:

非常感谢。那是个好主意 :) 系统在后台运行这个调用需要做很多工作吗?这些方法不执行复杂的操作,所以我想应该没问题.. ?!

以上是关于在没有第二个线程的情况下调用objective-c中延迟的函数的主要内容,如果未能解决你的问题,请参考以下文章

从第二个线程引发事件到主线程,没有表单[重复]

可以在调用实例方法时释放 Objective-C 对象吗?

在此上下文中启动了第二个操作

IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?

Threaing模块, 多线程的使用。

如何使用 UIPickerView 设置第二个组件