간헐적으로 충돌이 계속되는 앱에 몇 가지 문제가 있습니다. 아래의 코드는 받침 층으로 CATiledLayer와의 UIView에 있습니다CATitledLayer를 사용하는 간헐적 인 EXC_BAD_ACCESS 예외
- (UIBezierPath *)path
{
if(_path == nil){
_path = [UIBezierPath bezierPath];
CGFloat lineWidth = 5;
[_path setLineWidth:lineWidth];
[_path setLineJoinStyle:kCGLineJoinRound];
[_path setLineCapStyle:kCGLineCapRound];
[_path moveToPoint:CGPointMake(100, 100)];
[_path addLineToPoint:CGPointMake(200,200)];
[_path addLineToPoint:CGPointMake(150,200)];
[_path addLineToPoint:CGPointMake(50,400)];
_path closePath];
return _path;
}
return _path;
}
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithRed:0.1 green:0.1 blue:1 alpha:0.45] setStroke];//sets stroke color in current context
[self.path stroke];
}
나는 다음과 같은 오류 코드 수 :
Single stepping until exit from function _ZN2CG4Path15apply_transformERK17CGAffineTransform, which has no line number information.
오류가 발생했을 때 어떤 패턴 것 같다하지 않습니다. 스크롤 또는 확대/축소를 수행하는 중 일부 시점에서 발생할 수 있습니다. 때로는 줌/스크롤하자마자 충돌이 발생합니다. 때로는 충돌이 발생할 때까지 잠시 동안 확대/축소하고 스크롤 할 수 있습니다.
iOS4 이전에는 UIKit이 스레드로부터 안전하지 않으며 CATiledLayers와 함께 사용할 수 없다는 것을 알고 있습니다. tech note 내 문제 (내 생각 엔) 스레드 문제로 보인다. 확실하게 UIKit은 책임을 질 수 없습니까?
당신이 경로마다 시간을 다시 계산하고 변수에 저장하지 때 (즉, 비 스레드 안전 할 수 있음)됩니까? – sch
그건 효과가있는 것 같습니다. 문제는 어떻게하면 drawRect에 다른 경로를 전달할 수 있을까요? 내 예제는 쉽게 읽을 수 있도록 단순화되었지만 내 프로그램은 그려야 할 self.path 속성을 설정해야합니다. –