Я провел пару дней, пытаясь выяснить, что происходит.Я прочитал множество документов по управлению памятью, и я до смерти устал от слуха «для каждого выделенного файла вам нужен релиз» - я знаю это и все еще не могу понять, почему мой код вызывает утечки памяти.
Я пишу простой пользовательский класс с NSMutableDictionary в качестве одного из его свойств.По сути, он имитирует XMLELement.Я не могу понять, почему выделение словаря вызывает утечку памяти.Утечка происходит как на устройстве, так и на симуляторе - 5 утечек на устройстве и 20 на симуляторе.
Утечка возникает, когда я объявляю и выделяю переменную * tmp.
Существует такжеутечка, когда я устанавливаю детали атрибута (имя и значение).
Это сводит меня с ума.Пожалуйста, помогите!
Часть кода:
</p>
<pre><code>@interface IMXMLElement : NSObject {
NSString *strElementName;
NSString *strElementValue;
NSMutableDictionary *dictAttributes;
}
@property (nonatomic, retain) NSString *strElementName;
@property (nonatomic, retain) NSString *strElementValue;
@property (nonatomic, retain) NSMutableDictionary *dictAttributes;
@end
@implementation IMXMLElement
@synthesize strElementName;
@synthesize strElementValue;
@synthesize dictAttributes;
-(id)initWithName:(NSString *)pstrName
{
self = [super init];
if (self != nil)
{
self.strElementName = pstrName;
**LEAK NSMutableDictionary *tmp = [[NSMutableDictionary alloc] init];
self.dictAttributes = tmp;
[tmp release];
}
return self;
}
-(void)setAttributeWithName:(NSString *)pstrAttributeName
andValue:(NSString *)pstrAttributeValue
{
**LEAK [self.dictAttributes setObject:pstrAttributeValue forKey:pstrAttributeName];
}
-(void)dealloc
{
[strElementName release];
[strElementValue release];
[dictAttributes release];
[super dealloc];
}
Для доступа к этому классу используйте следующий код:
NSString *strValue = [[NSString alloc] initWithFormat:@"Test Value"];</p>
<pre><code>IMXMLElement *xmlElement = [[IMXMLElement alloc] initWithName:@"Test_Element"];
[xmlElement setAttributeWithName:@"id" andValue:strValue];