0

私はこの機能を持っていますが、ARCは使用しません:

-(NSString *)getDataFileDestinationPath      
{
    NSMutableString *destPath = [[NSMutableString alloc] init];
    [destPath appendString:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];
    [destPath appendFormat:@"/%@.%@", dataFileName, dataFileExtension];
    return destPath;
    [destPath release];
}

したがって、リリース メッセージがないと、リーク分析で大きなメモリ リークが発生します。メッセージを追加しました[destPath release];が、このメソッドを使用しようとすると (デバッグ プロセス中にわかるように)、コードのこの行はまったく呼び出されませんでした。したがって、メッセージが返された後、コントロールは次のメソッドに移動します。メモリを解放するには、リリース機能をどこに実装すればよいですか?

4

2 に答える 2

3

この場合、autorelease を使用する必要があります。

    -(NSString *)getDataFileDestinationPath      
{
    NSMutableString *destPath = [[NSMutableString alloc] init];
    [destPath appendString:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];
    [destPath appendFormat:@"/%@.%@", dataFileName, dataFileExtension];
    [destPath autorelease];
    return destPath;
}
于 2013-04-07T17:43:34.203 に答える
3

これがautorelease発明されたものです。

return [destPath autorelease];

または、最初に文字列オブジェクトを割り当て初期化せずに、最初に自動解放されたインスタンスを作成します。

NSMutableString *destPath = [NSMutableString string];
于 2013-04-07T17:43:45.020 に答える