NSString* my_string = [[NSString alloc] initWithString:@"Initial string"];
не выпускается автоматически (так как оно создается методом init ..., это соглашение), его retainCount равно 1.
NSString* something = [NSString stringWithFormat:@"%@", @" with something"];
автоматически выпускается.
нормально ли добавлять строку, которая принадлежит пулу авто-релизов, как stringByAppendingString: возвращает
До тех пор, пока вы ожидаете, что она будет жить для даОднако в вашем коде:
NSString* my_string = [[NSString alloc] initWithString:@"Initial string"];
NSString* something = [NSString stringWithFormat:@"%@", @" with something"];
my_string = [[my_string stringByAppendingString:something] retain];
у вас есть утечка.Вы должны автоматически освободить my_string перед повторным назначением.Таким образом, последняя строка должна быть:
my_string = [[[my_string autorelease] stringByAppendingString:something] retain];
в противном случае вы навсегда потеряли указатель на объект, который вы должны освободить.Поскольку вы сохраняете результат, вы несете ответственность за его освобождение, поэтому у вас также есть утечка в строке до последней, которая должна быть
my_string = [[[my_string autorelease] stringByAppendingString:something_else] retain];