我有一個資產管理器,需要通知所有者它的資產已準備就緒。我向消費者發送令牌以聽取傾聽通知以避免更緊密的耦合。問題是當資產已經加載時,我需要在延遲後調用loadComplete。在objective-c中執行此操作的最佳方法是什麼?模擬異步函數調用
資產管理
-(tokenString*) loadAssetPath:(NSString*) asset {
//start asynchronous load
//or if assets ready send complete <-- issue
return nonceToken;
}
-(void)loadComplete {
[[NSNotificationCenter defaultCenter]
postNotificationName:tokenString object:self];
}
消費者
NSString* token;
-(void) loadSomething {
if(token)
[self removeListener];
token = [[AssetManager sharedManager]
loadAssetPath:@"http://server.dev/myLargeImage.png"];
[[NSNotificationCenter defaultCenter]
addObserver:[AssetManager sharedManager]
selector:@selector(assetLoaded:) name:token];
}
-(void)assetLoader:(NSNotifcation*)aNotification {
[self removeListener];
//continue on with stuffing stuff
}
我剛剛發現'performSelector:withObject:afterDelay:'看起來應該可以工作。如果我調用'[self performSelector:@selector(loadingMethod :) withObject:asset afterDelay:0.3];'並且在資產已經下載時直接調用loadMethod loadComplete:tokenString。這看起來應該起作用。 – puppybits 2011-05-01 16:09:09
0.3沒有必要。除非需要特定的時間(例如計時器),否則通常應該在這裏傳遞0。 – 2011-05-01 16:20:53