Я ищу код, который создает изменяемый объект данных и помещает в него хэш SHA1. Если я инициализирую целевой изменяемый объект данных с помощьюРазница между [[NSMutableData alloc] initWithLength:] и CFDataCreateMutable()?
CFMutableDataRef hashDataRef = (CFMutableDataRef)[[NSMutableData alloc] initWithLength:SHA_DIGEST_LENGTH];
все работает нормально. Если я изменяю, что одна линия
CFMutableDataRef hashDataRef = CFDataCreateMutable(kCFAllocatorDefault, SHA_DIGEST_LENGTH);
он ломает (изменяемые объект данных, как представляется, по-прежнему быть пустым после команды SHA1). В обоих случаях, линия, которая следует за создание hashDataRef
является
SHA1(CFDataGetBytePtr(inputDataRef), CFDataGetLength(inputDataRef), CFDataGetMutableBytePtr(hashDataRef));
Я не ожидал, что там будет какая-то разница между этими двумя, но ясно, что я что-то не хватает. Есть ли правильный способ Core Foundation для получения изменяемого объекта данных, который я хочу, без использования NSMutableData и бесплатного моста?
Возможно, стоит отметить, что 'CFDataCreateMutable()' больше похож на '- [NSMutableData initWithCapacity:]'. –
Собственно, это сходство вводит в заблуждение. Емкость 'CFDataCreateMutable()' является строгим пределом. «Емкость» '- [NSMutableData initWithCapacity:]' является лишь нижней границей распределения * first * (когда это происходит), но не препятствует тому, чтобы объект вырос из этого. Это в основном просто оптимизация. –