Come faccio a creare una matrice modificabile di CGImageRefs?
-
21-09-2019 - |
Domanda
Voglio mantenere un mutevole collezione di CGImageRefs.Ho bisogno di inserirli in NSValue, e se è così come faccio avvolgere e li scartano correttamente?Posso ottenere via con l'utilizzo di una matrice C?Se è così come faccio a costruirlo e come faccio ad aggiungere elementi a più tardi?È significativamente più costoso di usare UIImages invece di CGImageRefs come gli elementi della collezione?
Soluzione
Come la CGImageRef fuori di un UIImage tramite image.CGImage può essere costoso. Dalla documentazione:
Se l'immagine è stata spurgata a causa di vincoli di memoria, invocando questo metodo forze che dati a essere caricato in memoria. Il caricamento dei dati di immagine può incorrere in una riduzione delle prestazioni.
Se ti trovi bene con la miscelazione C ++ e Objective-C, è possibile utilizzare un std :: vector per la memorizzazione del CGImageRef. Rinominare il file sorgente da .m a .MM e provare questo:
#include <vector>
...
CGImageRef i;
...
std::vector<CGImageRef> images;
images.push_back(i);
Se si desidera mantenere il vettore come un membro di una classe Objective-C, è necessario allocare sul mucchio, non lo stack:
File di intestazione:
#include <vector>
using std;
@interface YourInterface : ...
{
vector<CGImageRef> *images;
}
e nel file di implementazione:
images = new std::vector<CGImageRef>();
images->push_back(i);
...
//When you're done
delete images;
images = NULL;
Altri suggerimenti
È possibile aggiungere direttamente CGImage a NSMutableArray. Avrete bisogno di lanciare a (id) per evitare avvisi del compilatore.
CFType è colmato a NSObject. È possibile inviare qualsiasi messaggio NSObject risponde a qualsiasi CFType. In particolare, -retain e -release lavoro come normale.
2011:nel caso in cui qualcuno è ancora alla ricerca Si può avvolgere CGImageRef in NSValues utilizzando
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type
quindi:
CGImageRef cgImage = [self cgImageMethod];
NSValue *cgImageValue = [NSValue valueWithBytes:&cgImage objCType:@encode(CGImageRef)];
[array addObject:cgImageValue];
da recuperare:
CGImageRef retrievedCGImageRef;
[[array objectAtIndex:0] getValue:&retrievedCGImageRef ];
spero che questo aiuta qualcuno