В настоящее время я сталкиваюсь с самой серьезной проблемой всех времен при создании приложений для iPhone, которая связана с управлением памятью.
Я читаю файл XML и храню в базе данных с помощью SQLITE. Читая файл XML, я создаю объект из файла класса TestFile и выделяю для него место. Поэтому, когда он читает начальный тег, он выделяет пространство, а когда находит конечный тег, он освобождает пространство и освобождает для следующих тегов.
// класс TestFile
@interface TestFile : NSObject {
NSString *id;
NSString *number;
NSNumber *size_A;
NSNumber *size_B;
NSNumber *places;
NSString *spaces;
NSString *name;
NSString *print;
NSString *description;
NSNumber *formats;
NSString *purchases;
NSNumber *active;
UIImage *appLogo;
NSUInteger starred;
}
Но по какой-то причине, когда я проверяю приборы на предмет выделения памяти, пространство памяти, выделенное для testFile = [[TestFile alloc] init], составляет около 32 КБ, что убивает приложение для загрузки на iphone 3GS. Я что-то здесь не так делаю или я могу сделать что-то другое?
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if([elementName isEqual:@"root"]) {
self.exhArray = [NSMutableArray array] ;
}
else if([elementName isEqualToString:@"object"])
{
testFile = [[TestFile alloc] init] ;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"root"])
return;
if([elementName isEqualToString:@"object"]) {
[self.exhArray addObject:testFile];
[testFile release];
testFile = nil;
}
else if([elementName isEqualToString:@"key_id"])
[testFile setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}