Возвращение? - PullRequest
       4

Возвращение?

2 голосов
/ 17 февраля 2010

как я могу безопасно вернуть NSString без повреждения данных? например, я сделал так ..

-(NSString *)compose
{
  NSString *xml;
   return xml;
}

Если xml имеет более 2 КБ, будет ли он возвращен безопасно ... как я могу каждый раз выделять память с помощью автоматического выпуска?

Ответы [ 4 ]

0 голосов
/ 17 февраля 2010

2Kb не должно быть проблемой, но если у вас есть этот вызов в узком цикле (то есть он вызывается много раз, не выходя из метода, который вызвал ваш метод compose), есть риск, что вы будете использовать память, которая выиграла не будет выпущен до позже.

Если вас беспокоит утечка памяти (я полагаю, это именно то, что вы подразумеваете под коррупцией), тогда не упустите удивительно полезный инструментальный инструмент (самый простой способ - перейти в меню «Выполнить» и выбрать «Выполнить с помощью Performance Tools- > Утечки. Если у вас возникла проблема с дампом и внезапным выходом, вы можете проверить наличие зомби (доступ к освобожденной памяти) непосредственно из инструмента Инструменты:

File-> New Выберите симулятор iPhone или iPhone (в зависимости от того, на чем вы хотите его запустить, я просто использую симулятор для большинства) и опцию Memory. Затем выберите зомби с правой стороны Нажмите Выбрать Установите целевой объект по умолчанию (на панели инструментов), чтобы Запустить Исполняемый файл-> YourAppName

Вы сможете определить строку кода, вызвавшую проблему.

0 голосов
/ 17 февраля 2010

Класс NSString был протестирован Apple, поэтому он не должен содержать никаких искажений. Что касается размера данных, нет ограничений на объем памяти. Для решения проблемы автоматического выпуска вы должны добавить свой объект в пул автоматического выпуска следующим образом:

- (NSString *)compose {
    NSString *yourXMLText = [[[NSString alloc] initWithData:yourXMLData encoding:NSUTF8StringEncoding] autorelease];
    return yourXMLText;
}

Для получения дополнительной информации об управлении памятью вы можете увидеть это: Правила управления памятью

0 голосов
/ 17 февраля 2010

Я бы использовал один из NSString удобных методов, как сказал Дэвид.

NSString * xml = [NSString stringWithFormat:....];
return xml;

Это будет автоматически освобождено в конце цикла выполнения.

0 голосов
/ 17 февраля 2010

Метод NSString stringWithFormat: вернет автоматически освобожденный NSString, как и string и многие другие. Кроме того, вы можете вызвать метод autorelease на NSString, чтобы добавить его в пул авто-релиза. Я не могу говорить с ограничением размера NSStrings, но я не знаю ни одной причины, по которой они не могли быть такими большими, но я уверен, что кто-то меня поправит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...