基于块的代码转换?

时间:2011-07-22 01:17:26

标签: ios cocoa-touch objective-c-blocks

我是使用基于块的代码的新手,所以我需要知道如何将下面的代码转换为基于块的代码,以使其更有效。什么固件采用基于块的代码?

    - (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 个答案:

答案 0 :(得分:1)

我假设您特意指的是使用Grand Central Dispatch with block(而不是仅使用块)。但是,这里的问题是,在编写代码时,您无法利用并发性,因为您正在修改removeBadWordsFromString中的字符串。如果你试图同时在多个线程上编辑该字符串,如果字符串没有在原子问题中处理,那么非常糟糕的事情会发生(并且会发生)。如果字符串是在原子问题中处理的,那么你就不会获得性能提升,因为它一次只能对它进行一次操作。

有关并发性的更多信息,您真的需要阅读Apple关于并发性的文档,这解释了这一点:

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