iOS 5 용 응용 프로그램을 만들고 일부 그라디언트를 그립니다. 다음 그라디언트 코드는 ARC 전에 항상 사용해 왔지만 지금은 여러 번 사용할 때 (즉, 메모리 관리 문제 일 때) 내 장치에서 더 이상 작동하지 않습니다 (그러나 시뮬레이터에서 작동 함). 어쨌든, 여기에 코드입니다 : ARC에서 CoreGraphics 그라데이션에 __bridge를 사용하면 응용 프로그램이 중단됩니다.
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = { 0.0, 1.0 };
NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);
CGGradientRelease(gradient);
원래, 더 __bridge 문 없었다, 엑스 코드에 의해 제안 내가 그들을했다. 문제의 원인은 무엇입니까?
stacktrace에서 어느 시점에서 충돌이 발생합니까? 나는 그것이 실패 할 수있는 몇 가지 점을 생각할 수있다. 그라디언트 그리기, 그라디언트 만들기 등의 작업을 수행 할 때 오류가 발생합니까? –
objc 객체에 대한 __bridge 대화를 할 때 정확하게 꺽쇠를.습니다. –