don't cache as much metadata, use the cached NSURL resources, do a concurrent enumeration

protect access to self.dict with @synchronized, see http://codereview.stackexchange.com/questions/39435/how-to-make-this-recursive-function-thread-safe