Right now this is just a quick answer with some first impressions I notice before I get to work. I'll edit and improve this answer later.
First of all, I don't like what's going on in your init method. We're wasting time initializing a handful of strings to literal values. And this is done for every initialization.
These instead should be constants available to the class, so at the top of the .m, before the interface or implementation, define these constants as such:
NSString * const kName = @"name"; NSString * const kPluralName = @"pluralName";
Etc., etc., on down the line.
This can also be done with the 6 strings that make up the keys and values in the dictionary, although it cannot be done with the dictionary itself. You still stop from creating a new dictionary every time the class is instantiated and create the dictionary only when needed when the Objective-C worked around to having a class level variable (instead of instance variable). The pattern looks like this:
+ (NSDictionary *)requestStringDictionary { static NSDictionary *requestStringDictionary; @synchronized(self) { if (!requestStringDictionary) { requestStringDictionary = @{kKEY_venueCategories : kVenueCategories, kKEY_venueBasedOnLocation : kVenueBasedOnLocation, kKEY_venueImageURLs : kVenueImageURLS}; } } return self; }
So, now when you need this dictionary, you just call [[self class] requestStringDictionary];
The method itself checks whether or not requestStringDictionary points to nil. If it does, it creates a new dictionary, which requestStringDictionary points to (and no longer point to nil). Otherwise, it returns requestStringDictionary, which points to this very same dictionary. The code inside the if block can be called multiple times if the dictionary is ever deallocated, but it will only ever be called again after it's been deallocated.
The @synchronized(self) ensures thread safety.
And finishing off the init method, I really don't like what we're doing with todaysDate.
Why do we need to lock in the date right now, when the object is initialized? The only reason to lock in initialization date would be for debugging purposes, and at that, time seems way more useful... and either way, simply NSLogging will give us that information. I don't see how initialization date is important here (and you haven't provided complete code, because I see it used no where).
Moreover, if we must keep the date, why do we have to have it as a string representation in init? I don't understand this either. If you really must save the initialization time stamp, you need a variable called "creationDate" or "initializationDate" or something, and it should be an NSDate object, and you should just set it to [NSDate date] in init.