Objective-C的功能延迟
问题描述:
我现在使用它搜索HTML后返回的NSString功能, 的代码是Objective-C的功能延迟
- (IBAction) analysys:(id)sender {
comparisonOptions = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
NSString *coupangURL = @"http://www.coupang.com/alldeal.pang";
NSMutableArray * title = [[NSMutableArray alloc] init];
[title addObject:(NSString*)@"box"];
for (NSString * e in title) {
NSString * addr = [self searchCoupang:coupangURL targetString:e];
self.myTextView.text = addr;
}
}
- (NSString*) searchCoupang:(NSString *) url targetString:(NSString*) tString{
NSString *testString = [NSString stringWithContentsOfURL:[NSURL URLWithString:url]
encoding:NSUTF8StringEncoding
error:nil];
NSString * targetURL;
if (testString != NULL){
// Find the string
NSRange rangeOfTargetString = [testString rangeOfString:tString options:comparisonOptions];
t = [NSDate timeIntervalSinceReferenceDate];
if(rangeOfTargetString.location != NSNotFound) {
// Adjust range to take the line takes URL
NSRange cutRange = {rangeOfTargetString.location - cutStringValueToGetTheAddress, cutStringValueToGetTheAddress};
// Line which takes URL
NSString * lineContainsURL = [testString substringWithRange:cutRange];
NSRange rangeStartOfURL = [lineContainsURL rangeOfString:@"href"];
NSRange rangeEndOfURL = [lineContainsURL rangeOfString:@"onclick"];
NSRange targetRangeOfURL = {rangeStartOfURL.location + 6 ,((rangeEndOfURL.location - 2) - (rangeStartOfURL.location + 6)) };
targetURL = [lineContainsURL substringWithRange:targetRangeOfURL];
}
return targetURL;
}
else
return @"Reading url error";
}
工作正常,但是当我检查的运行时间每个“searchCoupang功能“诸如此类
NSString *testString = [NSString stringWithContentsOfURL:[NSURL URLWithString:url]
encoding:NSUTF8StringEncoding
error:nil];
和
if (testString != NULL){
// Find the string
NSRange rangeOfTargetString = [testString rangeOfString:tString options:comparisonOptions];
t = [NSDate timeIntervalSinceReferenceDate];
if(rangeOfTargetString.location != NSNotFound) {
// Adjust range to take the line takes URL
NSRange cutRange = {rangeOfTargetString.location - cutStringValueToGetTheAddress, cutStringValueToGetTheAddress};
// Line which takes URL
NSString * lineContainsURL = [testString substringWithRange:cutRange];
NSRange rangeStartOfURL = [lineContainsURL rangeOfString:@"href"];
NSRange rangeEndOfURL = [lineContainsURL rangeOfString:@"onclick"];
NSRange targetRangeOfURL = {rangeStartOfURL.location + 6 ,((rangeEndOfURL.location - 2) - (rangeStartOfURL.location + 6)) };
targetURL = [lineContainsURL substringWithRange:targetRangeOfURL];
}
工作几毫秒,但是当我查看了“搜索延时”时间延迟几秒钟后的功能。
for (NSString * e in title) {
// start to check the time
NSString * addr = [self searchCoupang:coupangURL targetString:e];
// End checking time (takes few seconds)
self.myTextView.text = addr;
}
此延迟来自哪里?
感谢,
答
你确定它不是- stringWithContentsOfURL
这是造成延误?它是一个同步功能,因此应用程序必须等待连接到URL,为生产环境下载数据等,您真的想要移动到异步进程。你可以通过线程或大*调度来完成。我个人认为GCD是做这种事情的一种简单方法。
如果它不是下载导致它,我不能看到会是什么..除非你在谈论大量的长字符串..但那么这意味着一个漫长的下载时间。
+1。我不认为OP知道'-stringWithContentsOfURL:'代表他执行同步的'NSURLConnection'。 – 2011-12-31 01:17:59
实际加载的html文件的大小很大,但是当我用小尺寸的html文件(带有URL)检查它时,它的时间几乎是相同的,所以我认为它不是downlonding数据大小的问题。但连接到URL将是问题。而当我重复3〜4次时,它会变快。会不会因为它保存了文件? – 2011-12-31 05:14:23
是的,它可能确实在缓存文件的过程中的某个时刻。 – 2011-12-31 05:21:10