0

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;

}

4

1 に答える 1

0

for ループを繰り返すたびに、新しい NSString を割り当てています。これらの NSString は自動解放されますが、最後の入力のすべての処理が完了するまで、実際には解放されません。それまでの間、潜在的に無限の量のメモリを割り当てます。解決策は、独自の自動解放プールを作成し、for ループを通過するたびにそれを排出することです。次のようになります。

BOOL appendFlag = YES;
for( int i=0; i<[originalText length]; i++ ) {    
NSAutoreleasePool *pool = [NSAutoreleasePool new];
// rest of for loop body
[pool drain];
}

これにより、現在のポインターが使用しているメモリがすぐに解放されます。

于 2009-07-10T03:03:52.010 に答える