我需要一些关于在iOS中使用__bridge
的建议.
希望下面的SSCCE1能比我用语言更好地解释这个问题,但我需要知道如何将void*
转换为NSMutableArray*
;应该使用哪一个变量(参见代码中的注释).
读到不同的桥梁,我推断我需要__bridge_transfer
个,但随后我在addObject:
上收到了一个EXC_BAD_访问权限
最后,我希望在CGPathApply
被调用之后,在CGPath
中有一个CGPoints
的array.
#import <Foundation/Foundation.h>
void _processPathElement(void* info, const CGPathElement* element)
{
NSMutableArray *array = (/* WHAT BRIDGE HERE */ NSMutableArray*) info;
switch (element->type)
{
case kCGPathElementMoveToPoint:
case kCGPathElementAddLineToPoint:
{
CGPoint point = element->points[0];
[array addObject:[NSValue valueWithCGPoint:point]];
break;
}
default:
break;
}
}
int main(int argc, char *argv[])
{
@autoreleasepool
{
//Create path
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint( path, NULL, 0, 0);
CGPathAddLineToPoint(path, NULL, 1, 0);
CGPathAddLineToPoint(path, NULL, 1, 1);
CGPathAddLineToPoint(path, NULL, 0, 1);
CGPathCloseSubpath(path);
NSMutableArray *pathPoints = [NSMutableArray array];
CGPathApply(path, &pathPoints, _processPathElement);
NSLog(@"Points:%@", pathPoints);
}
}