Приемник в большинстве случаев будет обрабатывать выделение памяти. Кто освобождает, зависит от того, как вы определяете право собственности. Память, выделенная получателю, больше не нужна после его возвращения? Если это так, вы, вероятно, должны отметить в своей документации, что вызывающая сторона должна освободить возвращенный массив. Если получатель может повторно использовать возвращенную память, оставьте для нее освобождение.
Если вы хотите передать вызываемому объекту распоряжение о распределении памяти, вы, вероятно, не будете использовать свойство и вместо этого выберете сообщение и свойство, например:
- (NSUInteger) mapPointCount;
- (void) getMapPoints:(MKMapPoint *)pointsOut;
, где отправитель должен предоставить существующий буфер для хранения obj.mapPointCount
количества MKMapPoints. Затем вы возлагаете ответственность за распределение / освобождение на вызывающего.
Если вы не хотите идти по этому пути, и, поскольку рассматриваемая память не может быть сохранена / освобождена / автоматически освобождена получателем, я оставляю ее вызывающей стороне, чтобы освободить ее. Если вы хотите прояснить, что память не подлежит освобождению, верните ее с типами const MKMapPoint *
и , отметьте это в какой-то форме документации (которая, как мы надеемся, должна дать понять, что память не принадлежит тем, кто получает доступ к данным).
В качестве альтернативы, сохраните их в NSData или что-то еще и проясните, что после слива следующего пула автоматического выпуска указатель становится недействительным. Однако, это немного менее дружелюбно и, возможно, небезопасно при сборке мусора. Возможно, неправильно в этом последнем эпизоде, но я не знаю достаточно, чтобы сказать, поэтому сейчас я предпочитаю осторожность.