私は、次の方法があります。オブジェクトが明らかにクラッシュが発生しませんが、まれにしか
+ (NSString*) getMD5HashFromFile:(NSString*)filePath {
CFStringRef md5hash = FileMD5HashCreateWithPath((CFStringRef)filePath, FileHashDefaultChunkSizeForReadingData);
NSString *hashStr = (NSString*)md5hash;
CFRelease(md5hash);
return hashStr;
}
私は約1 20-30の実行中に、シミュレータ上でのランダムなクラッシュを得ていたが。これが一貫していなかったという事実は、以前より深く掘り下げるのに役立ちませんでした。
コードがもう一度表示されたので、md5hash
が返される前に解放されることは明らかです。つまり、返されたオブジェクトは無効になります。返される値は、別のメソッドで一貫して使用され、時々クラッシュすることがありますが、必ずしもそうではありません。私の質問は、これがまれにしか起こらず、必ずしも起こらない理由です。
Obj-CとCコードの組み合わせ、および自動解放プールの働きは何ですか?
注:バグはNSString *hashStr = [NSString stringWithString:(NSString*)md5hash]
を使用して解決されているようですが、それは私には分かります。
がクラッシュしますが、あなたにロブをありがとうございました。これはかなり良い説明だと思います。実際、私はそれが書かれていることを知ったので、私はすでにこれを新しいことを理解しています。明らかに十分ではない:)再びありがとう – dimitrios
私たちは私たちが思い出したはずのものを忘れる:D https://twitter.com/#!/cocoaphony/status/174989186032603136 –