私はARCベースのプロジェクトに取り組んでいます。大きなテキスト ファイルからテキストを取得していて、そこから空白または改行文字を削除する必要があります。次のコードはシミュレーターでは正常に動作しますが、iPad ではクラッシュし、完全には実行されません (これはメモリの問題である可能性があります)。たとえば、ループを 2000 回実行する必要がある場合、iPad で 1800 回実行するとクラッシュします。
- (BOOL)formatTheText {
NSString *content = [NSString stringWithContentsOfURL:_textFileURL
encoding:NSUTF8StringEncoding
error:NULL];
NSRange paraRange = {0,1};
NSString *modifiedContent = @"";
BOOL previousLineWasEmpty = NO;
int lineNumber = 0;
while (paraRange.location < [content length]) {
NSRange currentParaRange = [content paragraphRangeForRange:paraRange];
NSString *paragraph = [content substringWithRange:currentParaRange];
NSCharacterSet *newLineSet = [NSCharacterSet newlineCharacterSet];
NSArray *array = [paragraph componentsSeparatedByCharactersInSet:newLineSet];
NSString *currentParagraph = @"";
for (NSString *line in array) {
currentParagraph = [currentParagraph stringByAppendingString:line];
}
// Add a space when combining two lines
modifiedContent = [modifiedContent stringByAppendingFormat:@"%@ ",currentParagraph];
paraRange.location += currentParaRange.length;
if ([currentParagraph length] == 0) {
// If previous line was empty just add a new line character
if (previousLineWasEmpty) {
modifiedContent = [modifiedContent stringByAppendingString:@"\n"];
} else {
// Add two lines for the start of a new paragraph
modifiedContent = [modifiedContent stringByAppendingString:@"\n\n"];
}
previousLineWasEmpty = YES;
} else {
previousLineWasEmpty = NO;
}
lineNumber++;
}
self.cleanedString = modifiedContent;
return YES;
}