Блок на основе преобразования кода? - PullRequest
0 голосов
/ 22 июля 2011

Я новичок в использовании блочного кода, поэтому мне нужно знать, как преобразовать приведенный ниже код в блочный, чтобы сделать его немного более эффективным.Также в какой прошивке принят код на основе блоков?

    - (NSString *)removeBadWordsFromString:(NSString *)string {

    for (NSString * word in badWords){
        string = [string stringByReplacingOccurrencesOfString:word withString:@"" 
                                                      options:NSCaseInsensitiveSearch range:NSMakeRange(0, string.length)];
    }

    return string;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    [textField setText:[self removeBadWordsFromString:[NSString stringWithFormat:@"%@%@", textField.text, string]]];

    return (string.length == 0);

1 Ответ

1 голос
/ 22 июля 2011

Я предполагаю, что вы имеете в виду именно использование Grand Central Dispatch с блоком (в отличие от просто использования блоков). Однако проблема здесь заключается в том, что при написании кода вы не можете воспользоваться преимуществами параллелизма, поскольку вы изменяете строку внутри removeBadWordsFromString. Если вы попытаетесь отредактировать эту строку в нескольких потоках одновременно, очень плохие вещи могут (и будут) случиться, если строка не будет обработана в атомарном вопросе. Если строка обрабатывается в атомарной среде, вы не получите увеличения производительности, потому что она может воздействовать на нее только по одному за раз.

Для получения дополнительной информации о параллелизме вам действительно необходимо прочитать документ Apple о параллелизме, который объясняет это:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html

...