我最近将其中一个属性的类型从 @property (readonly) NSImage *someData
更改为 @property (readonly) float *someData
。数据是一个大的 float 组。在更改之前,NSImage
是根据该 float 据创建的。
从那时起,每当我在代码中调用 [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];
}
}
这目前有效,但会引发有关从结果类型为“id”的函数返回“float *”的不兼容指针类型的警告
。所以这不是最终的解决方案。
所以我的理解是你不能拥有指针类型的属性。这是正确的吗?
另外,我真的想通过属性传递该指针。有没有某种方法可以将指针包装在某些数据结构中,从而使这项工作正常进行?
编辑: float 组的大小可能有几百兆,所以如果可以的话我不想复制它。我认为将其复制到 NSArray 中会有所帮助,但这肯定会降低性能。
最佳答案
根据@BastiBechtold 下面的评论:使用 NSValue 指向数组是将 float 组封装在 NSObject 中而不进行复制的最佳方法。
关于objective-c - 如何将 float * 数组作为属性传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148448/