Для вопроса 1: единственная причина, чтобы сохранить его наверху и выпустить его позже, была бы безопасностью потока, в случае, когда вас вызывают из одного потока, а другой поток освобождает последнее владение данными, но это выигралоне поможет: даже если вы сохраните объект, освобождение может произойти до этого или даже до вашего вызова, и в этом случае проблема все еще возникает, и вы только сделали ее реже.Поэтому я говорю, не беспокойтесь об этом.
Для вопроса 2: переименуйте вашу функцию в CreateDataByTransformingData
.Затем в соответствии с правилами управления памятью CF правила ваша функция возвращает владение, которое должен освободить вызывающий объект.
Альтернативное решение вопроса 2: приведите к NSData *
и отправьте ему autorelease
сообщение.(Для этого требуется, чтобы вы использовали MRC, а не ARC, по крайней мере, для этого модуля / класса.)
[Добавлено 2013-11-01] Альтернативное альтернативное решение: Требуйте OS X 10.9 или более поздней версии и используйте theновая CFAutorelease
функция .