का उपयोग कर ढाल ड्राइंग करते समय CFArrayRef और NSArray के साथ समस्या मेरे पास एक एआरसी प्रोजेक्ट है और मैं एक लंबवत रैखिक ढाल खींचने की कोशिश कर रहा हूं। नीचे दिया गया कोड सिम्युलेटर पर काम करता है, लेकिन डिवाइस पर परीक्षण करते समय स्मृति/EXC_BAD_ACCESS
त्रुटि फेंकता है। एप्लिकेशन कोड की निम्न दो पंक्तियों के साथ पर दुर्घटनाओं:एआरसी
NSArray *colorArray = [NSArray arrayWithObjects:(__bridge id)topColor, (__bridge id)bottomColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colorArray, colorLocations);
कोड के उन दो लाइनों के लिए निम्न कोड से लिया जाता है (संदर्भ के लिए प्रदान की गई): किसी भी के लिए समय की
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[self createGradientForContext:context andView:self.captionView];
[self createGradientForContext:context andView:self.linksView];
[self createGradientForContext:context andView:self.commentView];
}
- (void)createGradientForContext:(CGContextRef)context andView:(UIView *)view
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat colorLocations[] = { 0.0f, 1.0f };
CGColorRef topColor = [[UIColor colorWithRed:51.0f/255.0f green:51.0f/255.0f blue:51.0f/255.0f alpha:1.0f] CGColor];
CGColorRef bottomColor = [[UIColor colorWithRed:48.0f/255.0f green:48.0f/255.0f blue:48.0f/255.0f alpha:1.0f] CGColor];
NSArray *colorArray = [NSArray arrayWithObjects:(__bridge id)topColor, (__bridge id)bottomColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge_retained CFArrayRef) colorArray, colorLocations);
CGRect frame = view.frame;
CGPoint startPoint = CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame));
CGPoint endPoint = CGPointMake(CGRectGetMidX(frame), CGRectGetMaxY(frame));
CGContextSaveGState(context);
CGContextAddRect(context, frame);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
}
धन्यवाद आगे और सभी मार्गदर्शन
क्या आपको आर्क पसंद नहीं है? मेमोरी के प्रोग्रामर नियंत्रण को दूर लेना ... मैंने सोचा कि ऐप्पल ने कचरा संग्रह के साथ अपना सबक सीखा है। मैं इसका उपयोग नहीं करने की सिफारिश करता हूं ... –
मैं एआरसी का उपयोग करने की सिफारिश करता हूं, वास्तव में एक अनिवार्य कारण होने की आवश्यकता नहीं है। – zaph
आप ऑब्जेक्ट का उपयोग क्यों कर रहे हैं जब सब कुछ 'CFType' है? बस 'CFArray' का उपयोग करें और आपको ब्रिजिंग के बारे में चिंता करने की ज़रूरत नहीं है। –