关于Objective在这种情况下如何处理内存,我有一个基本问题:
void testimage(){
UIImage * iu = [UIImage imageNamed:@"testimage"];
NSData *imageData = UIImagePNGRepresentation(iu);
giveimage(imageData.bytes);
}我没有明确分配任何内存,因此也没有删除任何内存。我将二进制信息传递给另一个C函数(库的API的一部分) giveimage,然后使用它作为非目标C代码库中的纹理。
我的问题是:这些数据有多稳定?它只是一个指向内存中某些数据的指针。在这种情况下,是什么阻止系统用其他数据覆盖这个内存?我本人并没有坚持,所以这里是否有忧虑呢?
发布于 2016-01-01 19:52:13
在这种情况下,是什么阻止系统用其他数据覆盖这个内存?
公约:关于内存管理的可可规则。在这里,你站在了惯例的错误的一边。bytes指针的持续时间不会超过它的NSData实例。NSData和UIImage都有一个仅限于testimage函数的生命周期。
在这种情况下,您应该使用getBytes:length:将数据复制到自己的缓冲区中,或者以其他方式执行副本。否则,当testimage返回时,您的恐惧就会实现,数据将变得无效。
发布于 2016-01-01 19:49:13
你肯定有问题。在testimage函数的末尾,imageData超出了范围,并将被释放。这将带走它的bytes。
如果传递给giveimage的数据需要在调用giveimage之后存活下来,那么giveimage函数需要自己复制字节,而不是依赖传递给giveimage的指针。
https://stackoverflow.com/questions/34559249
复制相似问题