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,这将关闭它。
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,这将关闭它。