Задержка функции c задержкой - PullRequest
0 голосов
/ 30 декабря 2011

Я сейчас использую функцию, которая возвращает NSString после поиска по html, код

    - (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 Ответ

1 голос
/ 31 декабря 2011

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

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

...