Ваш вопрос говорит о том, что вы не хотите размещать и инициализировать объект в одной строке кода. Это может быть в том случае, если у вас есть какая-то логика, которая инициализирует ее различными строками, и вы хотите поместить эту логику между выделением и инициализацией.
Метод + alloc - это метод, который выделяет объекты, -init инициализирует его. Не требуется, чтобы эти методы вызывались вместе, хотя это общее соглашение. Поэтому следующий код является допустимым и позволяет поместить код между выделением и инициализацией:
NSString *str = [NSString alloc];
str = [str initWithString:@""];
Другое довольно распространенное решение - разместить объявление указателя перед распределением, поэтому также справедливо следующее.
NSString *str = nil;
str = [[NSString alloc] initWithString:@""];
Технически это все равно будет выделять и инициализировать объект вместе, если вам по какой-то причине действительно нужно, чтобы объект был выделен и инициализирован в двух отдельных строках, я бы порекомендовал мой первый пример.