如何将float *数组作为属性传递?

时间:2011-11-16 08:06:42

标签: objective-c cocoa pointers properties key-value-coding

我最近将其中一个属性的类型从@property (readonly) NSImage *someData更改为@property (readonly) float *someData。数据是一大堆浮点数。在更改之前,NSImage是根据浮动数据创建的。

从那时起,每当我在代码中调用[self didChangeValueForKey:@"someData"]时,我都会收到以下错误:

  

[MyController 0x109161710> valueForUndefinedKey:]:
  this class is not key value coding-compliant for the key someData.

所有其他物业继续正常运作。现在,对此的一个解决方案是以下代码:

- (id)valueForUndefinedKey:(NSString *)key {
    if ([key isEqualToString:@"someData"]) {
        return someData; // throws a warning because (float*) is not id
    } else {
        return [super valueForUndefinedKey:key];
    }
}

现在可以使用,但会发出有关incompatible pointer type returning 'float *' from a function with result type 'id'的警告。所以它不是最终的解决方案。

所以我理解这一点的方法是你不能拥有指针类型的属性。这是对的吗? 另外,我真的想通过属性传递指针。有没有办法将指针包装在一些可以使其工作的数据结构中?

编辑:浮点数组的大小可能只有100 Mb,所以如果我能提供帮助,我不想复制它。我想将它复制到NSArray会有所帮助,但这肯定会对性能造成不利影响。

2 个答案:

答案 0 :(得分:4)

根据@ BastiBechtold的评论如下:使用NSValue指向数组是在不复制NSObject的情况下封装浮动数组的最佳方法。

答案 1 :(得分:1)

您可以拥有float*类型的媒体资源。你甚至可以synthesize它的访问者。

您无法使用key-value coding protocol