Objective-C的功能延迟

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是做这种事情的一种简单方法。

如果它不是下载导致它,我不能看到会是什么..除非你在谈论大量的长字符串..但那么这意味着一个漫长的下载时间。

+0

+1。我不认为OP知道'-stringWithContentsOfURL:'代表他执行同步的'NSURLConnection'。 – 2011-12-31 01:17:59

+0

实际加载的html文件的大小很大,但是当我用小尺寸的html文件(带有URL)检查它时,它的时间几乎是相同的,所以我认为它不是downlonding数据大小的问题。但连接到URL将是问题。而当我重复3〜4次时,它会变快。会不会因为它保存了文件? – 2011-12-31 05:14:23

+0

是的,它可能确实在缓存文件的过程中的某个时刻。 – 2011-12-31 05:21:10