Обработка строк без утечек памяти?

Похоже, что ваша проблема в том, что вы назвали php container api1.domain.com, когда вам нужно назначить это доменное имя для контейнера nginx.

Вы можете назначить псевдонимы api1 / api2 для nginx внутри контейнерных сетей.

services:
   nginx:
      networks:
        default:
          aliases:
            - api1
            - api2
5
задан Chris Hanson 11 February 2009 в 11:18
поделиться

3 ответа

Любой метод какао, который возвращает новый объект с помощью метода, который не запускается с init или содержите слово copy возвратит автовыпущенный объект. Таким образом, вышеупомянутый код должен иметь noleaks.

Хотя может быть легче использовать NSMutableString здесь. Затем Вы просто изменяете строку на месте вместо того, чтобы создать груду автовыпущенных строковых объектов, которые должны сделать вещи инструментом для очистки.

Кроме того, как насчет словаря отображений, которых Вы выполняете итерации через, находя key и замена value из каждого объекта. Возможно, даже сохраните это как plist в Вашем приложении для легкой тонкой настройки позже.

8
ответ дан 18 December 2019 в 09:54
поделиться

Я рекомендую прочитать правила управления памятью Какао.

3
ответ дан 18 December 2019 в 09:54
поделиться

Как сказанный Squeegy, все вышеупомянутые методы Вы ссылаетесь на автовыпущенные объекты возврата. Второй пример кода откажет, потому что Вы сверхвыпускаете строковые объекты.

Squeegy указал один путь обработать это, с помощью NSMutableStrings. Я рекомендовал бы тот подход. Например, следующее переписывают Вашего метода:

-(NSString*) unescape:(NSString*)string
{
    NSMutableString *unescapedString = [[NSMutableString alloc] initWithString:string];
    [unescapedString replaceOccurrencesOfString:@"'" withString:@"'" options:0 range:NSMakeRange(0, [unescapedString length])];
    [unescapedString replaceOccurrencesOfString:@"&" withString:@"&" options:0 range:NSMakeRange(0, [unescapedString length])];
    [unescapedString replaceOccurrencesOfString:@""" withString:@"\"" options:0 range:NSMakeRange(0, [unescapedString length])];
    [unescapedString replaceOccurrencesOfString:@">" withString:@">" options:0 range:NSMakeRange(0, [unescapedString length])];
    [unescapedString replaceOccurrencesOfString:@"&lt;" withString:@"<" options:0 range:NSMakeRange(0, [unescapedString length])];
    return [unescapedString autorelease];
}

только возвращает автовыпущенный NSMutableString в конце.

Еще лучше был бы то, если бы Вы передали в указателе на указатель NSMutableString (NSMutableString **). Тем путем Вы могли изменить строку, которую Вы создали за пределами своего метода, не создавая новую временную строку. Если это кажется странным, смотрите на методы, которые имеют дело с экземплярами NSError как пример.

Править: Проигнорируйте мой оператор о необходимости в двойном указателе в предыдущем абзаце. Как erikprice указывает, просто необходимо передать в указателе NSMutableString. Двойной указатель только необходим при создании нового экземпляра NSMutableString в методе для замены того, передаваемого в, который не имеет место здесь.

6
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: