Frage

Ich will eine veränderbare Sammlung von CGImageRefs.Tun ich müssen, wickeln Sie Sie in NSValue, und wenn ja, wie kann ich wickeln und packen Sie richtig?Kann ich Weg mit Hilfe eines C-array?Wenn ja, wie gestalte ich es, und wie kann ich Elemente hinzufügen, um es später?Ist es deutlich teurer zu verwenden UIImages statt CGImageRefs, wie die Elemente der Kollektion?

War es hilfreich?

Lösung

Erste das CGImageRef aus einem UIImage über image.CGImage kann teuer werden. Aus der Dokumentation:

  

Wenn die Bilddaten aufgrund von Speicherbeschränkungen gespült worden, ist diese Methode aufgerufen wird, dass Kräfte geladenen Daten zurück in den Speicher sein. die Bilddaten Nachladen kann eine Leistungseinbuße entstehen.

Wenn Sie mit Misch C ++ und Objective-C wohl fühlen, können Sie ein std :: vector verwenden, um die CGImageRef zu speichern. Benennen Sie die Quelldatei aus .m zu .mm und versuchen Sie dies:

#include <vector>
...
CGImageRef i;
...
std::vector<CGImageRef> images;
images.push_back(i);

Wenn Sie den Vektor als Mitglied einer Objective-C Klasse halten wollen, sollten Sie es auf dem Heap zuweisen, nicht den Stapel:

Header-Datei:

#include <vector>
using std;

@interface YourInterface : ...
{
   vector<CGImageRef> *images;
}

und in der Implementierungsdatei:

images = new std::vector<CGImageRef>();
images->push_back(i);
...
//When you're done
delete images;
images = NULL;

Andere Tipps

Sie können direkt CGImage zu NSMutableArray hinzufügen. Sie werden zu cast (id) müssen Compiler-Warnungen zu vermeiden.

ist CFType zu NSObject überbrückt. Sie können alle Nachrichten NSObject reagiert auf einem CFType senden. Insbesondere -retain und -release Arbeit als normal.

2011:nur für den Fall jemand noch auf der Suche Sie können wrap CGImageRef in NSValues mithilfe

+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type

daher:

CGImageRef cgImage = [self cgImageMethod];
NSValue *cgImageValue = [NSValue valueWithBytes:&cgImage objCType:@encode(CGImageRef)];
[array addObject:cgImageValue];

abrufen:

CGImageRef retrievedCGImageRef;
[[array objectAtIndex:0] getValue:&retrievedCGImageRef ];

hoffe das hilft jemandem

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top