تؤدي محاولة الحصول على قيمة CGColor من خاصية ما إلى حدوث عطل

StackOverflow https://stackoverflow.com/questions/3275419

  •  17-09-2020
  •  | 
  •  

سؤال

أحاول تعيين خاصية مثل ذلك -

-واجهه المستخدم:

@property (readwrite, assign) CGColorRef otherBallColor;

-بعض الطريقة:

CGColorRef ballColor = [UIColor colorWithRed:255.0/256.0 green:165.0/256.0 blue:239.0/256.0 alpha:1.0].CGColor;  
[self setOtherBallColor:ballColor];

بمجرد أن أحاول الوصول إلى القيمة، فإنه يتعطل -

-someOtherMethod (drawRect في هذه الحالة):

CGContextSetFillColorWithColor(context, otherBallColor);

ولكن إذا كنت في "someMethod" أفعل -

CGColorRef ballColor = [UIColor blueColor].CGColor;

...كل شيء يعمل بشكل جيد.هل يمكن لأحد أن يشرح ما يحدث؟

شكرًا جزيلاً (ملاحظة، جديد تمامًا على Objective-C، ولكن ليس البرمجة بشكل عام)

هل كانت مفيدة؟

المحلول

يجب أن تحتفظ ب CGColor المرتجعة، وإنشاء [Uicolor Colorwith ...] إنشاء مثيل يتم إصداره تلقائيا، لذلك، عندما يكون خارج نطاق (AutoreLed I يعني ذلك)، يتم إصدار CGColor المقابل أيضا.

أوصي بك استخدام uicolor بدلا من cgcolorref إذا كنت ممكنا في هذه الحالة.

نصائح أخرى

تحدث عن إجابة متأخرة، لكن لدي حل بديل لهذه المشكلة تحديدًا، والتي واجهتني منذ فترة قصيرة.لقد وجدت هذا السؤال قبل الحل، لذا فكرت في إضافة سنتي.لقد أتضح أن UIColor لديه طريقة مثيل تسمى setFill, ، الذي يقوم بتعيين جهاز الاستقبال باعتباره لون تعبئة السياق الحالي.لذا يمكنك أن تكتب:

CGContextRef myContext = UIGraphicsGetCurrentContext();
[[UIColor colorWithRed:255.0/255.0 green:165.0/255.0 
                  blue:239.0/255.0 alpha:1.0] setFill];
CGContextFillPath(myContext);

أجد هذا حلاً أنظف، لأنه لا داعي للقلق بشأن الاحتفاظ بأي منها أو إطلاقها لاحقًا CGColorس.في الواقع، لا يتعين عليك حتى التعامل مع أي أوامر لإعداد ألوان تعبئة الرسومات الأساسية، مثل CGContextSetFillColorWithColor.

يمكنك الاطلاع على - (void)setFill الطريقة بمزيد من التفاصيل في وثائق UIColor أبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top