2012-09-14 11 views

Odpowiedz

31

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" 
+0

Jak odzyskać dane z konkretnego NSMutableData. –

+0

@VineeshTPtatatatedData jest zmienną danymi. – quantumpotato

0

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.

-3

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ą.

+0

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 –

4

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; 
} 
+2

Czuję pre-dojrzałe optymalizacje. Jeśli inne kody są wystarczająco dobre, ale nadal lepiej czytelne, powinny być preferowane. – vikingosegundo

+0

To dużo kodu do łączenia 3 zmiennych. – quantumpotato

+0

@quantumpotato zależy od tego jak dużo pamięci zmienne użyć –