首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么可以阻止-[NSData字节]成为一个悬空指针吗?

有什么可以阻止-[NSData字节]成为一个悬空指针吗?
EN

Stack Overflow用户
提问于 2016-01-01 19:21:57
回答 2查看 76关注 0票数 2

关于Objective在这种情况下如何处理内存,我有一个基本问题:

代码语言:javascript
复制
void testimage(){
    UIImage * iu = [UIImage imageNamed:@"testimage"];
    NSData *imageData = UIImagePNGRepresentation(iu);
    giveimage(imageData.bytes);
}

我没有明确分配任何内存,因此也没有删除任何内存。我将二进制信息传递给另一个C函数(库的API的一部分) giveimage,然后使用它作为非目标C代码库中的纹理。

我的问题是:这些数据有多稳定?它只是一个指向内存中某些数据的指针。在这种情况下,是什么阻止系统用其他数据覆盖这个内存?我本人并没有坚持,所以这里是否有忧虑呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-01 19:52:13

在这种情况下,是什么阻止系统用其他数据覆盖这个内存?

公约:关于内存管理的可可规则。在这里,你站在了惯例的错误的一边。bytes指针的持续时间不会超过它的NSData实例。NSDataUIImage都有一个仅限于testimage函数的生命周期。

在这种情况下,您应该使用getBytes:length:将数据复制到自己的缓冲区中,或者以其他方式执行副本。否则,当testimage返回时,您的恐惧就会实现,数据将变得无效。

票数 3
EN

Stack Overflow用户

发布于 2016-01-01 19:49:13

你肯定有问题。在testimage函数的末尾,imageData超出了范围,并将被释放。这将带走它的bytes

如果传递给giveimage的数据需要在调用giveimage之后存活下来,那么giveimage函数需要自己复制字节,而不是依赖传递给giveimage的指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34559249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档