我在iPhone项目Objective C类中拥有此功能。
虽然它在所需功能方面是正确的,但在几次调用之后,它会崩溃到调试器中。
所以我认为这是一个糟糕的内存管理案例,但我不知道在哪里。
- (NSString *)stripHtml:(NSString *)originalText {
// remove all html tags (<.*>) from the originalText string
NSMutableString *strippedText = [[NSMutableString alloc] init];
BOOL appendFlag = YES;
for( int i=0; i<[originalText length]; i++ ) {
NSString *current = [originalText substringWithRange:NSMakeRange(i, 1)];
if( [current isEqualTo:@"<"] )
appendFlag = NO;
if( appendFlag )
[strippedText appendString:current];
if( [current isEqualTo:@">"] )
appendFlag = YES;
}
NSString *newText = [NSString stringWithString:strippedText];
[strippedText release];
return newText;
}
答案 0 :(得分:0)
每次迭代for循环时,都会分配一个新的NSString。虽然这些NSStrings是自动释放的,但在完成上一次输入的所有处理之后,它们才会实际释放。在此期间,您将分配可能无限量的内存。解决方案是创建自己的自动释放池,并通过for循环将其排出。它看起来像这样:
BOOL appendFlag = YES;
for( int i=0; i<[originalText length]; i++ ) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
// rest of for loop body
[pool drain];
}
这将立即释放当前指针使用的内存。