#objective-c #memory-leaks #for-loop #release #xcode3.2
#objective-c #утечки памяти #цикл for #выпуск #xcode3.2
Вопрос:
Ниже приведен мой блок кода:
NSArray *innerArrayOfItems = [dictionaryOfItems objectForKey:kXMLNodeChildArray];
NSString *key = [[NSString alloc] init];
NSString *value = [[NSString alloc] init];
for (NSDictionary *innerDictionaryOfItems in innerArrayOfItems)
{
NSArray *keyValueOfString = [innerDictionaryOfItems objectForKey:kXMLNodeChildArray];
for (NSDictionary *innerDictonaryOfkeyValueOfString in keyValueOfString)
{
if ([[innerDictonaryOfkeyValueOfString objectForKey:kXMLNodeName] isEqualToString:@"Key"])
{
key = [innerDictonaryOfkeyValueOfString objectForKey:kXMLNodeContent];
}
if ([[innerDictonaryOfkeyValueOfString objectForKey:kXMLNodeName] isEqualToString:@"Value"])
{
value = [innerDictonaryOfkeyValueOfString objectForKey:kXMLNodeChildArray];
NSArray *valueArray = [innerDictonaryOfkeyValueOfString objectForKey:kXMLNodeChildArray];
for (NSDictionary *valueDictionary in valueArray)
{
if ([[valueDictionary objectForKey:kXMLNodeName] isEqualToString:@"ItemTypeAlias"])
{
for (NSDictionary *entity_Key_ViewNameDictionary in theDelegate.entity_Key_ViewNameArray)
{
if ([[[entity_Key_ViewNameDictionary allValues] objectAtIndex:0]
isEqualToString:[valueDictionary objectForKey:kXMLNodeContent]])
{
[dataTableArrayDeleted addObject:[[entity_Key_ViewNameDictionary allKeys] objectAtIndex:0]];
break;
}
}
//Getting DataTable Primary Key column name
for (NSDictionary *tables_PrimaryKey_TableNameDictionary
in theDelegate.tables_PrimaryKey_TableNameArray)
{
if ([[[tables_PrimaryKey_TableNameDictionary allKeys] objectAtIndex:0]
isEqualToString:[dataTableArrayDeleted lastObject]])
{
[dataTableKeyColumnArrayDeleted
addObject:[[tables_PrimaryKey_TableNameDictionary allValues] objectAtIndex:0]];
isDataAvailabeleForSaveDelete = TRUE;
break;
}
}
}
}
}
}
[self saveGetDataUpdatesDeletedData:key :value];
}
Приведенный выше код, посмотрите на объекты, заполненные анализатором xml, и посмотрите внутри каждого узла от родительского узла до дочерних узлов (условно) ,
В xml есть еще один блок, который представляет собой дополнительную информацию из вышеупомянутой коллекции узлов xml, после просмотра внутри вышеупомянутого цикла он сохранит все найденные значения для объекта, а затем перейдет к другому блоку и подробному поиску сохраненных значений.
Есть ли какой-либо другой правильный способ чтения / разбора xml и сохранения значений в переменных?
Спасибо, Имран Ризви
Комментарии:
1. доступно множество анализаторов XML. Попробуйте NSXMLParser для начала с.
Ответ №1:
Вы выделяете key
и value
, но позже вы просто перезаписываете их, не освобождая
NSString *key = [[NSString alloc] init];
NSString *value = [[NSString alloc] init];
вероятно, лучше изначально установить для них значение nil.
Комментарии:
1. Можете ли вы отправить код, чтобы изначально установить для них значение nil, если я сразу после выделения установлю для него значение nil, не приведет ли это к исключению/
2. после повторного посещения проекта и изменения всех этих исправлений пропусков, наконец, мы преодолели проблему
Ответ №2:
Вы должны использовать NSXMLParser, вот пример:
Пример взят из библиотеки разработчиков iOS. Вот краткий обзор примера:
Пример приложения SeismicXML демонстрирует, как использовать NSXMLParser для анализа XML-данных. Когда вы запускаете приложение, оно загружает и анализирует RSS-канал от Геологической службы США (USGS), который предоставляет данные о недавних землетрясениях по всему миру. Он отображает местоположение, дату и магнитуду каждого землетрясения, а также цветовую графику, которая указывает на серьезность землетрясения. Синтаксический анализ XML происходит в фоновом потоке с использованием NSOperation и обновляет представление таблицы earthquakes пакетами проанализированных объектов.
Вы должны посмотреть на класс ParseOperation.
Ответ №3:
Не настоящий ответ.. но как насчет использования TBXML
это быстро, легко, и вы можете легко очистить память! Если вы новичок, я настоятельно рекомендую TBXML.