我有一个资产管理器,需要通知所有者它的资产已准备就绪。我向消费者发送令牌以听取倾听通知以避免更紧密的耦合。问题是当资产已经加载时,我需要在延迟后调用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