पर एक ऑटोरेलेज्ड CGColor लौटाता है जो मैं एआरसी का उपयोग करने के लिए अपनी परियोजना को परिवर्तित करने की प्रक्रिया में हूं।एआरसी
@implementation NSColor (MyCategory)
- (CGColorRef)CGColor
{
NSColor *colorRGB = [self colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
CGFloat components[4];
[colorRGB getRed:&components[0]
green:&components[1]
blue:&components[2]
alpha:&components[3]];
CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGColorRef theColor = CGColorCreate(space, components);
CGColorSpaceRelease(space);
return (CGColorRef)[(id)theColor autorelease];
}
@end
एआरसी के साथ ऐसा करने का सही तरीका क्या है: मैं एक विधि है कि एक autoreleased CGColor प्रतिनिधित्व रिटर्न के साथ NSColor पर एक वर्ग है? मैं एक बनाए रखा CGColor वापस नहीं करना चाहता।
XCode में एआरसी कनवर्टर
return (CGColorRef)[(__bridge id)theColor autorelease];
लेकिन यह है कि निम्न त्रुटि संदेश में परिणाम उपयोग करने का सुझाव:
[rewriter] यह CGColorRef 'के लिए का परिणाम कास्ट करने के लिए सुरक्षित नहीं है 'autorelease' संदेश; एक __bridge डाली एक नष्ट वस्तु के लिए एक सूचक में हो सकता है और एक वस्तु
आपके पास यहां एक बहुत अच्छी मेमोरी लीक है। CGColorCreate एक CGColor ऑब्जेक्ट बनाएगा जो हर बार जब आप इस विधि को कॉल करेंगे तो स्मृति में आयोजित किया जाएगा। मैं अत्यधिक कुछ ऐसा करने का सुझाव देता हूं: 'CGColorRef colorRef = CGColorCreate (colorSpaceRGB, घटक); यूआईसीओलर * retColor = [UIColor colorWithCGColor: colorRef]; CGColorRelease (colorRef); वापसी retColor; ' – jfeldman
क्या आपने प्रश्न पढ़ा था? मुझे पता है कि यह लीक है, यह मेरी समस्या है। मैं एक सीजीकॉलर वापस करना चाहता था, न कि यूआईसीओलर (यह एक ओएस एक्स सवाल है जैसा कि आप एनएससीओलर के उल्लेख से बता सकते हैं)। वैसे भी, यह एक साल पहले आधा जवाब दिया गया है। – DrummerB