Похоже, что ваша проблема в том, что вы назвали php container api1.domain.com, когда вам нужно назначить это доменное имя для контейнера nginx.
Вы можете назначить псевдонимы api1 / api2 для nginx внутри контейнерных сетей.
services:
nginx:
networks:
default:
aliases:
- api1
- api2
Любой метод какао, который возвращает новый объект с помощью метода, который не запускается с init
или содержите слово copy
возвратит автовыпущенный объект. Таким образом, вышеупомянутый код должен иметь noleaks.
Хотя может быть легче использовать NSMutableString здесь. Затем Вы просто изменяете строку на месте вместо того, чтобы создать груду автовыпущенных строковых объектов, которые должны сделать вещи инструментом для очистки.
Кроме того, как насчет словаря отображений, которых Вы выполняете итерации через, находя key
и замена value
из каждого объекта. Возможно, даже сохраните это как plist в Вашем приложении для легкой тонкой настройки позже.
Я рекомендую прочитать правила управления памятью Какао.
Как сказанный 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:@"<" withString:@"<" options:0 range:NSMakeRange(0, [unescapedString length])];
return [unescapedString autorelease];
}
только возвращает автовыпущенный NSMutableString в конце.
Еще лучше был бы то, если бы Вы передали в указателе на указатель NSMutableString (NSMutableString **). Тем путем Вы могли изменить строку, которую Вы создали за пределами своего метода, не создавая новую временную строку. Если это кажется странным, смотрите на методы, которые имеют дело с экземплярами NSError как пример.
Править: Проигнорируйте мой оператор о необходимости в двойном указателе в предыдущем абзаце. Как erikprice указывает, просто необходимо передать в указателе NSMutableString. Двойной указатель только необходим при создании нового экземпляра NSMutableString в методе для замены того, передаваемого в, который не имеет место здесь.