[英]Accessing self.view in UIViewControllers init method causes crash
[英]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之后初始化的對象來弄亂預加載時間。 如果您使用上面的代碼段,您甚至不必擔心其中任何一個,而且還會獲得預加載的單例。
“是的。請非常小心(您的對象可能尚未完全初始化,它不應使用訪問器方法來遵守先前的限制,等等)”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.