我想保留一个可变的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