您好,我是目標 c 的新手。我在目標 c 中創建了一個類別。我曾經dispatch_once定義過自定義 UIColor。
檢查下面的代碼。
#import "UIColor CustomColors.h"
@implementation UIColor (CustomColors)
- (UIColor *)GetCustomColorLightYellowBGColor {
static UIColor *lightYellowBGColor;
//use dispatch_once_t pointer predicate to check if the block has finished
//A pointer to a dispatch_once_t structure that is used to test whether the block has completed or not
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
lightYellowBGColor = [UIColor colorWithRed:244.0 / 255.0
green:230.0 / 255.0
blue:54.0 / 255.0
alpha:1.0];
});
return lightYellowBGColor;
}
@end
https://developer.apple.com/documentation/dispatch/1447169-dispatch_once 上的dispatch_once 檔案提到以下內容
此函式對于應用程式中的全域資料(單例)的初始化很有用。在使用或測驗由塊初始化的任何變數之前,始終呼叫此函式。
所以我初始化自定義 UIColor 類,然后我使用
self.view.backgroundColor = customColorClass.CustomColorLightYellowBGColor;
視圖上的顏色變化正確,所以一切正常。
我想問以下問題。
如果我故意再次使用 self.view.backgroundColor = customColorClass.GetCustomColorLightYellowBGColor;
dispatch_once 會再次初始化 UIColor 還是因為單例初始化不會初始化 UIColor?任何幫助表示贊賞。
uj5u.com熱心網友回復:
dispatch_once()不管它在什么編譯單元中,它的作業原理都是一樣的。所以,是的,它只會初始化lightYellowBGColor一次。
請注意,方法名稱GetCustomColorLightYellowBGColor真的應該只是customColorLightYellowBGColor它應該是一個類方法,而不是一個實體方法,因為您不需要實體化 UIColor 來使該方法作業。
更好的是,它根本不應該是一個類別UIColor。雖然方便,但類別會導致代碼混亂,因為您正在有效地將應用程式特定代碼與框架代碼交織在一起。
此類事情的典型模式是擁有一個MyAppConfiguration類或包含一系列用于檢索此類配置項的方法的內容。這也為允許用戶通過將所有可配置項集中在一個地方來自定義應用程式的配置和/或呈現奠定了簡單的基礎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347485.html
