gpt4 book ai didi

ios - 使用 NSValue 包装一个 C 指针

转载 作者:行者123 更新时间:2023-11-28 21:23:45 26 4
gpt4 key购买 nike

我有一个 C 类型的指针变量:

a_c_type *cTypePointer = [self getCTypeValue];

如何将 cTypePointer 转换为 NSObject 类型,反之亦然?

我应该使用 NSValue 吗?使用 NSValue 的正确方法是什么?

最佳答案

您确实可以使用 NSValue。

a_c_type *cTypePointer = [self getCTypeValue];
NSValue * storableunit = [NSValue valueWithBytes:cTypePointer objCType:@encode(a_c_type)];

注意第一个参数是一个指针(void*)。该对象将包含指向的值。

回到C:

a_c_type element;
[value getValue:&element];

请注意,您将获得实际值,而不是指针。但是,你可以

 a_c_type *cTypePointer = &element

测试它:

- (void) testCVal
{
double save = 5.2;
NSValue * storageObjC = [NSValue valueWithBytes:&save objCType:@encode(double)];


double restore;
[storageObjC getValue:&restore];

XCTAssert(restore == save, @"restore should be equal to the saved value");

}

用 ptr 测试:

typedef struct
{
NSInteger day;
NSInteger month;
NSInteger year;
} CDate;

- (void) testCVal
{
CDate save = (CDate){8, 10, 2016};
CDate* savePtr = &save;

NSValue * storageObjC = [NSValue valueWithBytes:savePtr objCType:@encode(CDate)];


CDate restore;
[storageObjC getValue:&restore];
CDate* restorePtr = &restore;

XCTAssert(restorePtr->day == savePtr->day && restorePtr->month == savePtr->month && restorePtr->year == savePtr->year, @"restore should be equal to the saved value");

}

关于ios - 使用 NSValue 包装一个 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com