2009-05-24 1 views
0

私はiPhoneプロジェクトObjective Cクラス内にこの関数を持っています。メモリをリークすることなくNSMutableString変換を行うには?

いくつかの呼び出しの後、目的の機能に関して正しいですが、デバッガにクラッシュします。

私はこれが悪いメモリ管理のケースだと思いますが、私はどこにいるのか分かりません。

- (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

あなたの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]; 
} 

これは、現在のポインタで使用されているメモリをすぐに解放します。

関連する問題