まず、これを知らないため、事前にお詫び申し上げます。私は、この例では、メモリ管理を扱う最善の方法について頭を下ろそうとしています。リリースメッセージに達しない場合はNSFileManagerを解放してください
私は、ファイルをリストに追加する必要があるかどうかを判断する簡単な方法を持っています。チェックの1つはNSFileManagerをインスタンス化する必要があります。いくつかの小切手は潜在的に長い時間がかかる可能性があるので、私の条件のいずれかが失敗するとすぐに飛び降りたいと思います。しかし、私が早く戻ってくると、NSFileManagerインスタンスはリリースメッセージを受け取ることはありません。
私はAutoReleasePoolを使用することを考えましたが、現在の実行ループが終了するまでオートレリープールに追加されたオブジェクトはリリースされず、実行ループごとに数千ものファイルが表示されますすべてループの最後まで割り当てられます。
NSFileManagerの各インスタンスが適切に解放されるようにするにはどうすればよいですか。任意の提案が高く評価されました。
ありがとうございます!
- (BOOL) fileShouldBeAdded:(NSString *)filePath { BOOL fileShouldBeAdded = TRUE; NSFileManager *fileManager = [[NSFileManager alloc] init]; if ([[filePath lastPathComponent] containsString:@"test.txt"]) { fileShouldBeAdded = FALSE; return fileShouldBeAdded; } if (![fileManager xAttrFileAtPathShouldBeAdded:filePath]) { fileShouldBeAdded = FALSE; return fileShouldBeAdded; } if ([[BackupManager sharedInstance] isExcludedByUser:filePath]) { fileShouldBeAdded = FALSE; return fileShouldBeAdded; } if (![fileManager backupRequiredForPath:filePath]) { fileShouldBeAdded = FALSE; return fileShouldBeAdded; } [fileManager release]; return fileShouldBeAdded; }
あなたはいつもメモリ内のFileManagerのインスタンスを保持しているので、自動リリースされたインスタンスを使用するかどうかには違いはありません。自動リリースされたインスタンスは本当にここであなたが望むものです。 –