Вы не должны выпускать title1
- вам не принадлежит строка, возвращенная -objectForKey:
, и вы не стали владельцем, сохранив ее.
Я предлагаю прочитать Руководство по управлению памятью какао , чтобы предотвратить это в будущем.
Предполагая, что text
является свойством retain
: для изменяемых строк вы должны назначить копии строки, чтобы избежать их изменения под вами:
NSString *title1 = [[item objectForKey:@"week_day"] copy];
name1.text = title1;
[title1 release]; // copy means taking ownership, so release
Ниже приведен упрощенный пример того, что может происходить с вашим кодом в опубликованном виде:
// entering -viewDidLoad the first time:
NSString *title1=[item objectForKey:@"week_day"];
// lets assume that the strings retain count is 1 here
name1.text=title1;
// setter retains, retain count now 2
[title1 release];
// retain count now 1
// entering -viewDidLoad the second time:
NSString *title1=[item objectForKey:@"week_day"];
// assuming nothing else did retain it, strings retain count is still 1
name1.text=title1;
// you assigned the same object, retain count still 1
[title1 release];
// strings retain count now 0 - will be deallocated :(