Wie wird dispatch_data_t in NSData konvertiert?

8

Ist das der richtige Weg?

%Vor%

Es funktioniert gut. Mein Hauptanliegen sind Speicherlecks. Undichte Datenpuffer machen keinen Spaß. Also ist die NSData, der Puffer und die dispatch_data_t new_data_file alles in Ordnung?

Von dem, was ich auf Ссылка lesen kann, scheint der Puffer DISPATCH_DATA_DESTRUCTOR_FREE zu sein . Bedeutet das, dass es meine Verantwortung ist, den Puffer freizugeben?

    
hfossli 05.02.2012, 20:45
quelle

2 Antworten

3

In den meisten Fällen ist Ihr Code korrekt. +initWithBytes:length: kopiert den übergebenen Puffer so, dass Sie sich nicht darum kümmern müssen, den Puffer nach den Daten freizugeben, Sie können die Daten zuerst sicher freigeben.

Gemäß der Dokumentation befreien Sie die Daten NICHT nachdem Sie damit fertig sind:

  

Wenn Sie Nicht-NULL-Werte für buffer_ptr oder size_ptr angeben, werden die Werte zurückgegeben   Diese Variablen sind nur gültig, bis Sie die neu erstellten Dispatchdaten freigeben   Objekt. Sie können diese Werte als schnellen Weg verwenden, um auf die Daten des neuen zuzugreifen   Datenobjekt.

Sie geben einfach die Variable new_data_file frei (ARC wird dies nicht für Sie tun).

    
Richard J. Ross III 05.02.2012, 20:57
quelle
11

Seit iOS 7 und Mac OS X 10.9 ( Foundation Versionshinweise ) dispatch_data_t ist ein NSObject ( NSObject <OS_dispatch_data> ). dispatch_data_t kann jetzt frei in NSData * umgewandelt werden, nicht jedoch umgekehrt.

    
catlan 29.10.2013 22:28
quelle