Return 从 Objective-C 到 C# 的浮点 NSNumbers 的 NSArray

Return NSArray of float NSNumbers from Objective-C to C#

return 像这样的 NSNumbers 的大型(大小 = 2048)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 函数,但如果这样效果更好,您可以轻松地将其转换为 class 消息。

是的,您遍历了数组,但这仍然非常快。

最佳 方式取决于...除其他外,还取决于您如何在 Objective-C 和 C# 之间进行通信...可能有更好的方式,但是,除非您可以按原样发送 NSArray,这将关闭它。