0

以下のように初期化NSMutableStringされます。

 -(NSString*)filterIt:(NSString*)source
{
    temp1= [[NSString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];
    //NSString *m_temp;
    temp1 = [temp1 stringByReplacingOccurrencesOfString:@"&" withString:@""];
    temp1 = [temp1 stringByReplacingOccurrencesOfString:@"#x" withString:@"&#x"];
    NSRange range = [temp1 rangeOfString:@"&#x"];
    NSRange range1 = NSMakeRange(range.location, 8);
    if (range1.location != NSNotFound) {
        NSString* temp2 = [temp1 stringByReplacingCharactersInRange:range1 withString:@""];
        //[temp1 setString:temp2];
        temp1 = temp2;
        range = [temp1 rangeOfString:@"&#x"];
        while (range.location < [temp1 length]) {
            range1 = NSMakeRange(range.location, 8);
            temp2 = [temp1 stringByReplacingCharactersInRange:range1 withString:@""];
            //[temp1 setString:temp2];
            temp1 = temp2;
            range = [temp1 rangeOfString:@"&#x"];
        }
    }
    //m_temp = [temp1 mutableCopy];
//  [temp1 release];
    return temp1;
}

この文字列を dealloc メソッドで解放してアプリを実行しようとすると、アプリがクラッシュします。

このtemp1をリリースするにはどうすればよいか、いくつかの提案をお願いします

前もって感謝します

4

2 に答える 2

0

可変文字列を自動解放として返すことができます

また

これを参照してください...

于 2011-07-18T06:22:20.887 に答える
0

メソッド内でこの呼び出しを行っていると想定しています。提供したコードに基づいて、コード フラグメントが実際に次のようになっていることを確認します。

temp1= [[NSMutableString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];

stringByReplaceingOcurrenceOfString:withString: をソースに呼び出していると仮定しています。

そうは言っても、「dealloc」に到達するとプログラムがクラッシュすると主張しています..これは、コードで temp1 がインスタンス変数として宣言されていることを意味します...その場合、正しいコードは次のようになります (temp1 が保持属性が設定された宣言されたプロパティ):

self.temp1 = [[NSMutableString alloc] initWithString:[source stringByReplacingOccurrencesOfString:@"rlm;" withString:@""]];

temp1 がインスタンス変数でもプロパティでもない場合、メソッド内で temp1 が NSMutableString であることを示し、自動解放されたオブジェクトを返すことができます。

于 2011-07-18T07:59:11.510 に答える