我想保留一個可變的CGImageRefs集合。我是否需要將它們包裝在NSValue中,如果是的話,我如何正確包裝和解包它們?我可以逃脫使用C數組嗎?如果是的話,我該如何構建它,以後如何添加元素?使用UIImages而不是CGImageRefs作爲集合的元素是否成本更高?如何創建CGImageRefs的可變數組?
回答
通過image.CGImage獲取CGImageRef的UIImage可能是昂貴的。從文檔:
如果由於內存限制已清除映像數據,則調用此方法將強制將該數據加載回內存。重新加載圖像數據可能會導致性能損失。
如果你覺得舒服混合C++和Objective-C,你可以使用一個的std ::矢量用於存儲CGImageRef。從.M重命名你的源文件,以.mm和嘗試:
#include <vector>
...
CGImageRef i;
...
std::vector<CGImageRef> images;
images.push_back(i);
如果你想保持向量作爲Objective-C類中的一員,你應該給它分配在堆中,而不是堆:
頭文件
#include <vector>
using std;
@interface YourInterface : ...
{
vector<CGImageRef> *images;
}
,並在實現文件:
images = new std::vector<CGImageRef>();
images->push_back(i);
...
//When you're done
delete images;
images = NULL;
您可以直接添加CGI法師到NSMutableArray。您需要轉換爲(id)以避免編譯器警告。
CFType橋接到NSObject。你可以發送任何NSObject對任何CFType響應的消息。特別是 - 保持和釋放正常工作。
我還沒有找到任何可以將CFType轉換爲NSObject的文檔,請謹慎操作。更新可能會在未來破壞您的代碼。 – 2009-09-08 11:21:01
它應該記錄在某個地方。這是支持的。 (-Ken,Cocoa Frameworks) – Ken 2009-09-08 17:43:06
你怎麼把它弄出來?當我嘗試'CGImageRef img0 = [cgImages objectAtIndex:0];'我得到'從不兼容的指針類型初始化'。 – 2011-04-27 20:21:16
2011:萬一有人仍然在尋找 可以在NSValues包裝CGImageRef使用
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type
因此:
CGImageRef cgImage = [self cgImageMethod];
NSValue *cgImageValue = [NSValue valueWithBytes:&cgImage objCType:@encode(CGImageRef)];
[array addObject:cgImageValue];
檢索:
CGImageRef retrievedCGImageRef;
[[array objectAtIndex:0] getValue:&retrievedCGImageRef ];
希望這有助於有人
- 1. 如何在堆上創建可變長度的數組?
- 2. 在PyTables中,如何創建可變長度的嵌套數組?
- 3. PHP codeigniter如何創建變量數組
- 4. 如何創建拆箱可變數組實例
- 5. 如何在列表中創建可變數量的數組項目列表中的可變數量的項目?
- 6. 用NSString的名稱創建可變數組變量
- 7. 創建數組變量
- 8. 如何創建創建關聯數組?
- 9. C++ 14:如何使用可變參數模板創建值的數組1-100
- 10. 如何創建點數組?
- 11. 如何創建matchcollection數組
- 12. 如何創建JSON數組.. ..?
- 13. 如何創建JTextField數組?
- 14. 如何創建空數組?
- 15. 如何創建JFrame數組?
- 16. 正在創建具有可變數量元素的數組嗎?
- 17. 如何創建自變量字符串數組變量
- 18. 如何創建接受可變數量參數的Java方法?
- 19. 如何用可變成員變量創建不可變類?
- 20. 如何創建可調用的函數數組?
- 21. 如何在VC++中創建String ^的可變長度數組/向量
- 22. 如何在不用Python創建數組的情況下創建變量名?
- 23. 如何創建不可變類
- 24. 如何創建虛擬可變文件?
- 25. 如何使用EuCOM在Euphoria中創建BSTR的變體數組?
- 26. PostgreSQL的:如何創建角色率變化數組類型列
- 27. 創建持有可變大小的數組
- 28. 無指針創建可變大小的數組
- 29. Android - 創建一個可變對象類型的數組
- 30. 在CoDeSys中創建一個具有可變大小的數組
這比需要更復雜 - CGImages可以直接添加到NSMutableArray。 – Ken 2011-01-02 22:29:37