У меня есть следующий метод:
+ (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]
, что для меня совершенно логично.