string_values = [[dict objectForKey:key] **retain**];
You should synthetise a strong / retain property and assign your ivar via self.string_values. You can then release your dictionnary and string_value will still be valid.
...
@property(nonatomic, retain)NSString* string_value;
...
@synthetyse string_value;
...
then
self.string_values = [dict objectForKey:key];
And no, static analyzer is not a bullet proof for memory leaks. It can find algorythmically a leaks on compute time, but not those on runtime. That's why it's called static analyzer. But it's really helpful by the way!
You can then profile your apps and use the leaks tool in order to check others leaks.