为什么更改 UITextField 在一种情况下会导致无限循环,而在另一种情况下则不然


//  self.wordTextField.text = @"32";
//  self.wordTextField.text = [self.wordTextField.text lowercaseString];
//  self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:@" " withString:@"?"];
NSString *removeString = @"`1234567890-=~!@#$%^&*()_+[]\{}|;':",./<>";
NSMutableSet *removeSet = [NSMutableSet set];
for (unsigned i = 0; i < removeString.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *char_ = [removeString substringWithRange:range];
    [removeSet addObject:char_];
}
for (unsigned i = 0; i < self.wordTextField.text.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *thisLetter = [self.wordTextField.text substringWithRange:range];
    if ([removeSet containsObject:thisLetter]) {
        self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:thisLetter 
                                                                                     withString:@""];
        i--;
    }
}

这三个注释行都会导致我的方法进入无限循环,因为self.wordTextField.text位于更改编辑时调用的方法中,因此显然我的设置text属性会导致更多编辑更改,从而导致循环。我的问题是:为什么循环中的 .text setter 和条件语句不会导致这种行为?该部分如(用户(所期望的那样完美运行......

代码通过多次调用更改回调再次进入循环,但这不是无限循环,因为当从文本中删除所有无效字符时,它最终会停止。请注意,如果文本不包含任何要删除的字符,则不会调用循环中的资源库。

最新更新