2011-12-30 5 views
0

Я теперь использует функцию, которая возвращает NSString после поиска HTML, КодObjective-с задержкой функции

- (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]; 

    } 

работает несколько миллисекунд, но когда Я проверяю в нужное время после того, как функции, которые требуют время «searchCoupang» отсроченных несколько секунд

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; 
} 

Где эта задержка взялась?

Спасибо,

ответ

1

вы уверены, что это не - stringWithContentsOfURL, что вызывает задержку? это синхронная функция, поэтому приложение должно ждать, пока оно подключается к URL-адресу, загружает данные и т. д. для рабочей среды, вы действительно хотите перейти к асинхронному процессу. вы можете сделать это через потоки или большую центральную отправку. лично я обнаружил, что GCD - это простой способ сделать это.

Если это не загрузка, которая вызывает его, я не вижу, что будет ... если вы не говорите о массивных длинных строках .. но тогда это означало бы длительное время загрузки.

+0

+1. Я не думаю, что OP понимает, что '-stringWithContentsOfURL:' выполняет синхронное «NSURLConnection» от его имени. –

+0

Фактически загруженный размер файла html огромен, но когда я проверяю его с небольшим размером html-файла (с URL-адресом), его время почти такое же, поэтому я думаю, что это не проблема размера данных downlonding. Но проблема с подключением к URL-адресу. И когда я повторяю 3 ~ 4 раза, это происходит быстро. Будет ли это потому, что он сохраняет файлы? –

+0

Да, это может быть кеширование файлов в какой-то момент процесса. –

Смежные вопросы