Сохраняет ли NSString stringWithCString: length: байтовый массив, который я передаю?
Невозможно сохранить байтовый массив. Только объекты могут быть сохранены.
Нужно ли сохранять данные NSData *?
Нет. Поскольку строка не может сохранить данные (о которых она не знает) или их содержимое, строка будет копировать байты. (Подумайте, что бы вы сделали, если бы реализовывали этот метод: вот и все.)
Давайте изменим регистры и посмотрим, что бы вы сделали, если бы передавали объект данных вместо байтов.
Если строка сохраняет данные, вам не нужно беспокоиться о том, что данные исчезнут из-под строки, потому что строка сохраняет их. Если он не сохраняет его, строка либо создала свою собственную копию, либо вообще не хранит ваши данные.
Так что удержание других объектов не имеет значения. Не беспокойся о них. Беспокойся только о том, кому что принадлежит, и сохраняй или не сохраняй соответственно.
Должен ли я выпускать тело NSString * в конце?
Ну, вы не сохранили его, не распределили и не скопировали. Следовательно, вы не являетесь его владельцем. Итак, нет.
Если вы хотите стать владельцем объекта, вы сохраните его или сделаете (а затем и будете владеть) своей собственной копией. Тогда вы бы выпустили его.