0

ファイルの最終変更日を取得しようとしています:

NSFileManager *fm = [[NSFileManager alloc] init];
NSError *err;
NSDate *lastModif = [[fm attributesOfItemAtPath:filename error:&err] objectForKey:NSFileModificationDate];//filename is ok ;-)
if(err == nil) {
    [lastModif retain];
    //I can put a NSLog of lastModif here, it works !!
    NSTimeInterval lastModifDiff = [lastModif timeIntervalSinceNow];//crash here
}

NSDate がリリースされたように見える理由、retain がそれを保持しない理由がわかりません。

心当たりがありましたらよろしくお願いします...

4

2 に答える 2

0

保持する必要はありませんlastModiflastModifDiffNSLog を使用するとき、または後でそれを使用するときに、何らかのオブジェクトとして 処理しようとしている可能性があると思います。NSTimeIntervalは double の typedef であるため、double として扱うか[NSNumber numberWithDouble:lastModifDiff]、オブジェクトのように使用する必要があります。

于 2010-03-24T13:30:24.000 に答える
0

私は同じ問題を抱えていますが、この投稿は密接に関連しているように見えました:

NSDate : timeIntervalSinceNow クラッシュ

ゲームループで FPS を決定するために NSDate を使用して、startClock/endClock という単純な関数セットを作成しています。以前に設定した NSDate オブジェクトが存在しないと主張して、 timeIntervalSinceNow がクラッシュすることを除いて。

startClock を呼び出すと、NSDate オブジェクトの保持カウントが 1 になることはわかっていますが、私の理論では、NSDate インスタンスは、退屈して役に立たないと感じたときに自動解放するように内部的に設定されています。

保持/解放を使用して、これらの不安定で一時的な NSDate オブジェクトの所有権を想定すると、うまくいきました。

于 2012-03-29T15:22:56.533 に答える