[英]Return NSArray of float NSNumbers from Objective-C to C#
将像这样的大型(大小 = 2048)NSNumbers 的 NSArray 返回到 C# 代码以用作浮点数组(大小也为 2048)的最佳方法是什么:
NSArray<NSNumber*> *nsArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:1.1],[NSNumber numberWithFloat:2.2],[NSNumber numberWithFloat:3.3], nil];
将它作为 float* 返回将是理想的,因为我可以在 C# 中对其进行编组,但我愿意接受建议。
我总是可以期望 NSArray 的大小为 2048 并且它总是具有由 NSNumber 表示的浮点值
我不确定什么是 Objective-C 和 C# 之间最好的通信,但是如果您可以使用数组,这就是您可以加载它的方式。
// Create float * array from NSArray of floats
void doIt ( NSArray < NSNumber * > * arrayOfFloats )
{
// Need to allocate memory
float * f = malloc( sizeof ( float ) * arrayOfFloats.count );
// Load it
[arrayOfFloats enumerateObjectsUsingBlock: ^ ( NSNumber * i, NSUInteger idx, BOOL * stop ) {
f [ idx ] = i.floatValue;
}];
// Here you pass it to C#
// send f to C# ...
// Now done, so you can free f
// If C# passing copies f then you can free
// If it will free then you skip this step
// I recommend you keep it otherwise you have memory leak ...
free ( f );
}
这只是一个 C 函数,但如果效果更好,您可以轻松地将其转换为类消息。
是的,您遍历数组,但这仍然会非常快。
最好的方法取决于……除其他外,取决于您如何在 Objective-C 和 C# 之间进行通信……可能有更好的方法,但是,除非您可以按原样发送 NSArray,否则这将接近它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.