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

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

我最近将其中一个属性的类型从 @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/

相关文章:

objective-c - 桌面 Cocoa 中的 UIGraphicsGetImageFromCurrentImageContext 对应物?

cocoa - 有什么技巧可以让 OS X 中的 WEBVIEW 在单击链接时转到链接吗?

c - strcpy 如何在幕后工作?

c++ - 有没有更好的方法来初始化 C++ 中分配的数组?

objective-c - 编码 Objective-c block ?

ios - Google map URL 方案不适用于 iOS 9

objective-c - 有没有办法以编程方式在 OSX 上静音?

c++ - 链表拷贝构造函数C++

iphone - 在 UITabBarController 中滑动 UITabBarItems

iphone - 是否可以在 iPhone 和 iPad Storyboard之间共享 View Controller ?