我最近将其中一个属性的类型从@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会有所帮助,但这肯定会对性能造成不利影响。
答案 0 :(得分:4)
根据@ BastiBechtold的评论如下:使用NSValue指向数组是在不复制NSObject的情况下封装浮动数组的最佳方法。
答案 1 :(得分:1)
您可以拥有float*
类型的媒体资源。你甚至可以synthesize
它的访问者。