NSCache is a some kind of NSMutableDictionary. The difference is that when NSCache detects excessive memory pressure it will release some of it key-value pairs. In ViewControllerA you create NSCache object
NSCache * cache = [[NSCache alloc]init];
And in ViewControllerB you create one more NSCache object again
NSCache * cache = [[NSCache alloc]init];
So it will be two different objects with two different set of key-value pairs. If you need some kind of storage you can write singleton class which will contain one NSCache object.