繁体   English   中英

将浮点 NSNumbers 的 NSArray 从 Objective-C 返回到 C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM