无法更改数组中的值?

时间:2014-02-26 19:23:49

标签: ios objective-c c background-thread

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

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

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

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指针的数组......或者它们是否相同?

无论是什么原因,我怎样才能做到这一点,以便我能正确地改变这些价值观?

1 个答案:

答案 0 :(得分:2)

这应该可以正常工作。我认为你的问题只是你的断言向后 - 这个条件应该是你想成为 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]);

这将使得更明显的是,这些值实际上是相等的,并且在您的等式检查中出现了问题。