ios - 无法更改数组中的值?

标签 ios objective-c c background-thread

在我的程序中,我将 UIImage 的像素数据保存在一个基本的 C 数组中:

// It can be UInt8 as it is greyscaled, values can only be 0-255
@property (nonatomic, readwrite) UInt8 *imageData;

现在在我的灰度算法中我初始化它:

self.imageData = malloc(sizeof(UInt8) * width * height);

然后我在灰度化时填写数据。这行得通。然而,在后来的算法中,我通过一些魔法将值设为 0 或 255。我认为这工作正常......但后来寻找这些值的算法得到 1 和 3。因此,在我将值从 0-255 更改为 0 或 255 之后,我立即将其放入:

// Magic loop. Starts with current value at pixelIndex, gets curVal. 
self.imageData[pixelIndex] = curVal;
NSAssert(self.imageData[pixelIndex] != curVal, @"Whattt");

你瞧,它实际上并没有改变我数组的值。有什么我想念的吗?这些数组是一次性设置的,然后它们变成只读的吗?我知道 NSArrays 是这样的,但这只是一个简单的基于 C 指针的数组……或者它们是一样的吗?

无论是什么原因,我怎样才能正确地改变这些值?

最佳答案

这应该可以正常工作。我认为你的问题只是你的断言倒退了——条件应该是你想要的表达式 true,所以目前你断言“在我设置 self.imageData 之后[pixelIndex]curVal,不应等于 curVal。”相反,应该是:

NSAssert(self.imageData[pixelIndex] == curVal, @"Whattt");

顺便说一句,在进行此类断言时,我始终认为包含预期值和实际值会很有帮助,这样您就可以了解发生了什么。在这种情况下,您可以:

NSAssert3(self.imageData[pixelIndex] == curVal, @"Image data at pixel index %d should have been %d, but instead was %d", pixelIndex, curVal, self.imageData[pixelIndex]);

这会更明显地表明这些值实际上是相等的,并且在您的相等性检查中出现了问题。

关于ios - 无法更改数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051186/

相关文章:

ios - 安装新的 cocoapod 后缺少所需的模块

objective-c - 为什么变量不保留在 Asset-Library block 之外?

iphone - 在 iOS 应用程序中使用 PDF 作为矢量图像,保持透明度?

ios - 如何从 UIView 子类调用 UIViewController?

ios - 表头 View 自动布局问题

objective-c - NSMutableURLRequest 发送两次

c - 如何从 C 头文件准备 Fortran 模块?

c - 没有类型的外部

ios - 如何在 swift 3 中将滑动手势添加到 AVPlayer

c - 如何释放一个字符指针数组?