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

问题描述

将这样大的NSNumbers(大小= 2048)NSArray返回到C#代码以用作浮点数组(也是大小2048)的最佳方法是什么:

NSArray<NSNumber*> *nsArray = [NSArray arrayWithObjects:[NSNumber numberWithFloat:1.1],[NSNumber numberWithFloat:2.2],[NSNumber numberWithFloat:3.3],nil];

将其返回为浮点数*将是理想的,因为我可以用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,否则会更好。靠近它。