Iphone 如何创建CGImageRef的可变数组?

Iphone 如何创建CGImageRef的可变数组?,iphone,objective-c,arrays,uikit,cgimage,Iphone,Objective C,Arrays,Uikit,Cgimage,我想保留一个可变的CGImageRef集合。我需要用NSValue包装它们吗?如果需要,如何正确包装和展开它们?我可以使用C数组吗?如果是这样,我该如何构造它,以及以后如何向它添加元素?使用UIImages而不是CGImageRef作为集合元素的成本是否会显著增加?通过image.CGImage从UIImage中获取CGImageRef的成本可能会很高。从文件中: 如果由于内存限制而清除了图像数据,则调用此方法将强制将该数据加载回内存。重新加载图像数据可能会导致性能损失 如果你觉得混合C++和O

我想保留一个可变的CGImageRef集合。我需要用NSValue包装它们吗?如果需要,如何正确包装和展开它们?我可以使用C数组吗?如果是这样,我该如何构造它,以及以后如何向它添加元素?使用UIImages而不是CGImageRef作为集合元素的成本是否会显著增加?

通过image.CGImage从UIImage中获取CGImageRef的成本可能会很高。从文件中:

如果由于内存限制而清除了图像数据,则调用此方法将强制将该数据加载回内存。重新加载图像数据可能会导致性能损失

如果你觉得混合C++和ObjuleC很舒服,你可以使用一个STD::vector来存储CGIMAVERF。将源文件从.m重命名为.mm,然后尝试以下操作:

#include <vector>
...
CGImageRef i;
...
std::vector<CGImageRef> images;
images.push_back(i);
#包括
...
CGI;
...
矢量图像;
图像。推回(i);
如果希望将向量保留为Objective-C类的成员,则应在堆而不是堆栈上分配它:

头文件:

#include <vector>
using std;

@interface YourInterface : ...
{
   vector<CGImageRef> *images;
}
#包括
使用性病;
@接口YourInterface:。。。
{
矢量*图像;
}
在实施文件中:

images = new std::vector<CGImageRef>();
images->push_back(i);
...
//When you're done
delete images;
images = NULL;
images=newstd::vector();
图像->推回(i);
...
//完成后
删除图像;
图像=空;

您可以直接将CGImage添加到NSMutableArray。您需要强制转换为(id)以避免编译器警告


CFType桥接到NSObject。您可以将NSObject响应的任何消息发送到任何CFType。特别是,-正常保留和释放工作。

2011:以防万一有人还在看 您可以使用

+ (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 ];

希望这对其他人有所帮助

我还没有找到任何可以将CFType转换为NSObject的文档,在执行此操作时请小心。更新可能会在将来破坏您的代码。它应该在某个地方记录下来。这是支持的。(-Ken,Cocoa Frameworks)那你怎么把它弄出来?当我尝试
CGImageRef img0=[cgImages objectAtIndex:0]我得到“来自不兼容指针类型的初始化”,我希望说一些关于它被支持的事情,但事实并非如此。看,我会小心的。这比必要的复杂得多-CGImage可以直接添加到NSMutableArray。