簡體   English   中英

從init訪問自我的方法?

[英]Accessing method on self from init?

我正在使用已經設置[[FGAudio sharedInstance] preload];單例來預加載和訪問我的音頻文件(包括sfx和音樂),我開始運行[[FGAudio sharedInstance] preload]; 來自AppDelegate,但擔心在使用單例之前必須記住要調用預加載。 我的問題是使事情自動化,我可以在單例中訪問方法以在init中進行設置和預加載,還是因為事情仍在啟動而訪問方法init是不明智的?

+ (FGAudio *)sharedInstance {
    static FGAudio *sharedAudio = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedAudio = [[FGAudio alloc]init];
    });
    return sharedAudio;
}

- (id)init {
    self = [super init];
    if(self) {
        [self preload];
    }
    return self;
}
+ (FGAudio *)sharedInstance {
    static FGAudio *sharedAudio = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedAudio = [[FGAudio alloc]init];
        [sharedAudio preload];
    });
    return sharedAudio;
}

如果可以保證子類不會與它或它依賴的對象發生混亂,則從init引用該方法也不錯,將來您不會通過要求在調用preload之后初始化的對象來弄亂預加載時間。 如果您使用上面的代碼段,您甚至不必擔心其中任何一個,而且還會獲得預加載的單例。

從init方法調用方法?

“是的。請非常小心(您的對象可能尚未完全初始化,它不應使用訪問器方法來遵守先前的限制,等等)”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM