Как поменять местами две переменные NSString (в среде без сбора мусора)? - PullRequest
0 голосов
/ 07 сентября 2010

Я пытаюсь поменять две строки, но я не уверен, что то, что я делаю, является законным (исходя из Java, я новичок во всем управлении памятью сохранения счета).

Вот мой код:

NSString *temp = [[NSString alloc] init];
temp = originalLanguageCode;
originalLanguageCode = translatedLanguageCode;
translatedLanguageCode = temp;
[temp release];

Это разрешено? Я получаю некоторые странные ошибки, и я не уверен, что их вызывает, надеясь, что это может быть. Любая помощь очень ценится, спасибо!

Ответы [ 2 ]

5 голосов
/ 07 сентября 2010

После назначения новой выделенной строки для temp вы сразу назначаете ей originalLanguageCode, поэтому выделенная строка полностью теряется. Это утечка памяти. Затем вы выпускаете temp, который изначально был originalLanguageCode. Это переиздание.

Попробуйте вместо этого:

NSString *temp = originalLanguageCode;
originalLanguageCode = translatedLanguageCode;
translatedLanguageCode = temp;
1 голос
/ 07 сентября 2010

Все выглядит хорошо, за исключением того, что в первой строке вы создаете строку, которую вы немедленно пропускаете во второй.Вы можете просто сказать:

NSString *temp = originalLanguageCode;
...

... и избавиться от [temp release], так как вы не создали (и не владеете) объект, назначенный для "temp."

Теперь вы не сказали, являются ли originalLanguageCode и translationLanguageCode переменными экземпляра.Если это так, используйте их методы доступа (которые сами должны делать правильные вещи с управлением памятью).

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