Jak połączyć zmienne 3 NSData
?Jak połączyć 3 zmienne NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Muszę połączyć je z jedną zmienną. Czy ktoś może mi pokazać drogę.
Jak połączyć zmienne 3 NSData
?Jak połączyć 3 zmienne NSData
NSData *iv;
NSData *salt;
NSData *encryptedData;
Muszę połączyć je z jedną zmienną. Czy ktoś może mi pokazać drogę.
użyć NSMutableData
przedmiotu oraz sposób -(void)appendData:(NSData *)otherData
Edytowane dodać przykład:
NSMutableData *concatenatedData = [NSMutableData data];
[concatenatedData appendData:iv];
[concatenatedData appendData:salt];
[concatenatedData appendData:encryptedData];
// and now you have all of the data in the single variable "concatenatedData"
Można użyć NSMutableData
„s -appendData
metody:
NSMutableData *result = [NSMutableData data];
[result appendData:iv];
[result appendData:salt];
[result appendData:encryptedData];
// result now has what you need.
Dzieje się napowietrznej wykorzystując dane zmienne, które mogą być wolniejsze & więcej pamięci, więc należy używać z rozwagą. Mówiąc ogólnie, nie chcesz, aby duża jednostka pływająca unosiła się w powietrzu.
Najpierw należy utworzyć dwa NSObjects
i używać tej metody
-(void)appendData:(NSData *)otherData
i umieścić w jednym NSData
później 3rd NSData
również połączyć tą samą metodą.
Dzięki za pomoc. Ale jestem nowy dla iPhone'a i jestem trochę spolszczony .. Czy możesz podać mi kod, aby dołączyć do tych trzech NSData .. Z góry dzięki –
Dla tych, którzy kodująca iOS5 i późniejszych. Chciałbym pokazać naprawdę dobre połączenie. Dlaczego te odpowiedzi nie są wystarczająco dobre? Ponieważ są one związane z dodatkowym wykorzystaniem pamięci dla skopiowanych danych. Zobaczmy odpowiedź:
NSMutableData *concatenatedData = [NSMutableData data];
[concatenatedData appendData:iv];
[concatenatedData appendData:salt];
[concatenatedData appendData:encryptedData];
tutaj mamy pamięć przeznaczona na iv
, salt
i encryptedData
także za każdym razem jeden z nich dołączy do naszego zmienny konkatenacji jesteśmy oczywiście skopiować go do modyfikowalnych danych ponownie. Czy chcemy tych dodatkowych wydatków, gdy mamy do czynienia z dużymi danymi? Ja nie.
Istnieje sposób na uniknięcie tego niepotrzebnego kosztu pamięci - dispatch_data
Nie zamierzam wyjaśnić, jak to działa, możesz google, jeśli chcesz. po prostu dać Ci kod, który działa:
NSData *iv = [@"some data" dataUsingEncoding:NSUTF8StringEncoding];
NSData *salt = [@"even more data" dataUsingEncoding:NSUTF8StringEncoding];
NSData *encryptedData = [@"and one more" dataUsingEncoding:NSUTF8StringEncoding];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_data_t dispatch_data_iv = dispatch_data_create([iv bytes], [iv length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
dispatch_data_t dispatch_data_salt = dispatch_data_create([salt bytes], [salt length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
dispatch_data_t dispatch_data_encrypted = dispatch_data_create([encryptedData bytes], [encryptedData length], queue, DISPATCH_DATA_DESTRUCTOR_DEFAULT);
iv = nil; salt = nil; encryptedData = nil; // free all parts, we dont need it anymore
dispatch_data_t dispatch_data_concat = dispatch_data_create_concat(dispatch_data_create_concat(dispatch_data_iv, dispatch_data_salt), dispatch_data_encrypted);
NSData *concatenatedNSData = DataFromDispatchData(dispatch_data_concat);
// lets check now if the concatenation works properly
NSString *stringFromConcatenatedNSData = [[NSString alloc]initWithData:concatenatedNSData encoding:NSUTF8StringEncoding];
NSLog(@"%@",stringFromConcatenatedNSData);
nie zapomnieć o pomocnika konwertera
NSData *DataFromDispatchData(dispatch_data_t data)
{
NSMutableData *result = [NSMutableData dataWithCapacity: dispatch_data_get_size(data)];
dispatch_data_apply(data, ^(dispatch_data_t region, size_t offset, const void *buffer, size_t size) {
[result appendBytes:buffer length:size];
return (_Bool)true;
});
return result;
}
Czuję pre-dojrzałe optymalizacje. Jeśli inne kody są wystarczająco dobre, ale nadal lepiej czytelne, powinny być preferowane. – vikingosegundo
To dużo kodu do łączenia 3 zmiennych. – quantumpotato
@quantumpotato zależy od tego jak dużo pamięci zmienne użyć –
Jak odzyskać dane z konkretnego NSMutableData. –
@VineeshTPtatatatedData jest zmienną danymi. – quantumpotato