Лучше, чем цикл for: быстрое перечисление :
// Don't forget to actually create the mutable array
NSMutableArray * sixLetterWords = [[NSMutableArray alloc] init];
for( NSString * word in allLinedStrings ){
if( [word length] == 6 ) [sixLetterWords addObject:word];
}
и перечисление на основе блоков с enumerateObjectsUsingBlock:
:
NSMutableArray * sixLetterWords = [[NSMutableArray alloc] init];
[allLinedStrings enumerateObjectsUsingBlock:^(id word, NSUInteger idx, BOOL * stop){
if( [(NSString *)word length] == 6 ) [sixLetterWords addObject:word];
}];
Существует также возможность фильтровать массив :
NSArray * sixLetterWords = [allLinedStrings filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length == 6"
Обратите внимание, что этот последний параметр дает вам автоматически освобожденный массив - если вы хотите сохранить его, вы должны сохранить его. С любым из них вам больше не нужно беспокоиться о длине массива или явной индексации; он обрабатывается для вас массивом. Быстрое перечисление также, как указывает его название, быстрее , чем простая for
петля.
Метод, который вы использовали для считывания текстового файла в вашу строку, stringWithContentsOfFile:encoding:error:
, не является new
или alloc
и не начинается с copy
или mutableCopy
; следовательно, согласно правилам управления памятью какао , вы не владеете им и не обязаны их освобождать. (И если вы хотите, чтобы он оставался за концом текущего метода, вам нужно сохранить его.)