私は__bridge
-iOSに関するアドバイスが必要です。__bridgeの場所と方法
うまくいけばSSCCE以下は、私は言葉にすることができますより良い問題を説明しますが、私はNSMutableArray*
にvoid*
を変換する方法を知っておく必要があります。どのような変更を使用する必要があります(コードのコメントを参照してください)。
異なる橋梁について読んで、私は、私がCGPath
後CGPathApply
でCGPoints
の配列を持っているしたいと呼ばれてきた私は__bridge_transfer
が必要になりますが、その後、私は最終的にaddObject:
にEXC_BAD_ACCESSを受けることが推定しました。
#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);
}
}
1:SSCCE
私は理解していません。 Xcodeが提案したように '__bridge'を使用しました。そしてあなたのプログラムはコンパイルされます。 – esh
これを探しているのですが、 '__bridge'はObjective-CとCore Foundationの間のポインタを所有権の移譲なしに転送します。 '__bridge_retained'または' CFBridgingRetain'は、Objective-CポインタをCore Foundationポインタにキャストし、あなたに所有権を移します。 CFReleaseまたは関連する機能を呼び出して、オブジェクトの所有権を放棄する責任があります。 '__bridge_transfer'または' CFBridgingRelease'は、非Objective-CポインタをObjective-Cに移動し、所有権をARCに転送します。 ARCはオブジェクトの所有権を放棄します。 – esh
@ BlackFlam3(第1のコメント)コンパイルするコードを取得するだけではありません。 'NSLog'の' pathLogs'にアクセスできるようにメモリを確保する必要があります。 –