У меня есть две проблемы. У меня есть один метод, который создает словарь, а затем сохраняю его для глобальной переменной, которую я синтезировал. Если я просто назначу его, когда я попытаюсь получить доступ к нему из другого метода, его пустой, если я использую копию, он будет утечка памяти.iOS NSDictionary Copy Memory Leak
Я могу просто назначить его, и он работает, если его, скажем, «более простой» объект, такой как NSString, почему это не работает с NSDictionary ?.
.h:
@interface ClassIHate : UIViewController{
NSDictionary *postBuild;
}
@property (nonatomic, retain) NSDictionary *postBuild;
-(void)prepData;
@end
I'm только включая классы, которые используют переменную postBuild, так как это моя проблема. .m
@implementation ClassIHate
@synthesize postBuild;
- (void)viewDidUnload {
postBuild = nil;
}
- (void)dealloc {
[postBuild release];
[super dealloc];
}
-(void)prepData{
NSInteger i = 0;
NSMutableDictionary *_postBuild = [[NSMutableDictionary alloc]initWithCapacity:0];
for (NSString *key in self.keys) {
NSMutableArray *array = [ops valueForKey:key];
NSInteger j = 0;
for (MyDataType *object in array) {
NSString *abc = object.abc;
UITableViewCell *cell = [table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:j inSection:i]];
UITextView *tv = (UITextView *)cell.accessoryView;
NSString *mon = tv.text;
NSString *monFormat = [[NSString stringWithFormat:@"%.2lf",[mon doubleValue]]stringByReplacingOccurrencesOfString:@"." withString:@","];
[_postBuild setObject:monFormat forKey:abc];
j++;
}
i++;
}
//postBuild = _postBuild; //Empty when called in other method
postBuild = [_postBuild copy]; //Leaks memory
[_postBuild release];
}
-(void)realizarOperaciones{
//DO STUFF
NSArray *postKeys = [postBuild allKeys]; //postBuild is nil if I dont use copy, leaks memory if I do.
//DO STUFF
}
Что может быть проблема здесь? Спасибо, Стефано.
Это переменная экземпляра, а не глобальная переменная. Это также не синтезированная переменная; в вашем примере синтезируются только определения метода. – 2010-11-23 22:28:27