我有解析代码:
NSError* error = nil;
NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"]
encoding:NSASCIIStringEncoding
error:&error];
从这段代码中我从网址收听名称跟踪。 我也把它拿到我的标签上:
[labelName setStringValue:text];
问题:如何更新我的标签?我希望我的标签在5秒后从URL更新。我使用了计时器计划..但是在此之后我的应用程序变得很慢......请帮助。
答案 0 :(得分:3)
假设您只是将上述代码放在视图控制器或类似视图的viewDidLoad中,您实际上会阻塞主线程(即UI线程),从而导致应用程序响应所需的时间。从site.ch/parse.php中检索字符串。如建议的那样,您应该在后台下载字符串。此外,必须在主线程上修改UI:
dispatch_queue_t queue = dispatch_get_global_queue(0,0);
dispatch_async(queue, ^{
NSError* error = nil;
NSString* text = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://site.ch/parse.php"]
encoding:NSASCIIStringEncoding
error:&error];
// checking if error == nil would be appropriate
dispatch_async(dispatch_get_main_queue(), ^{
self.labelName.text = text;
});
});
此示例(我为任何拼写错误道歉)在后台下载site.ch/parse.php中的文本,并在完成后设置标签。另外,as suggested here在下载真实文本时显示占位符文本是个好主意。
另外,如果您愿意,请查看performSelector:withObject:afterDelay。
答案 1 :(得分:0)
你应该尝试使用后台线程或GCD线程来连续更新文本。
答案 2 :(得分:0)
为什么不使用任何后台线程从网址获取数据,在获取数据后,您可以更新标签的值。这样就不会对您的应用程序性能产生任何影响。