Вам нужно выпустить NSData?

#iphone #release #nsdata

#iPhone #выпуск #nsdata

Вопрос:

 -(void) func1: (NSData*) somedata
{
    //Processing somedata ....

    [somedata release]; //is it necessay? 
}
  

Комментарии:

1. Нет никакого возможного способа узнать, необходим ли выпуск в этом сценарии.

2. Вам необходимо предоставить больше информации. Из вашего фрагмента кода невозможно узнать, как / когда / происходит ли владение somedata . Рассмотрите возможность редактирования вашего вопроса и публикации кода, в котором вы получаете экземпляр NSData * и как вы его передаете -func1: .

Ответ №1:

Вы не должны освобождать somedata внутри своего метода.

 NSData *somedata = [[NSData alloc] init];
func1(somedata);
[somedata release];
  

Предположения:

  • func1 выполняется в том же потоке

Комментарии:

1. Как первоначальный владелец Somedata узнает, когда это не нужно. Некоторые данные будут переданы в другую функцию или другой объект.

2. Что, если someData получены из какой-либо сложной функции делегирования и получены как из функции обратного вызова. Нет способа поместить [somedata release] в те функции делегирования, которые были созданы или ожидались.

Ответ №2:

В этом случае нет, вы не должны освобождать свой объект. Вы не являетесь «владельцем». Как правило, вам нужно освободить объект после завершения работы с ним, только если:

  • Вы выделили его через [MyClass alloc] , как в [[MyClass alloc] init] или [[MyClass alloc] initWithFoo:foo bar:baz] .
  • Вы получили копию через [someObject copy] или [someObject mutableCopy] .
  • Вы сохраняли его раньше.

Ответ №3:

Вам следует рассмотреть возможность его освобождения, если вы сохраняете его в этом случае. Но я не уверен, потому что ваш вопрос не дает никакого представления о том, требуется ли выпуск или нет. Но, как правило, у вас будут release возражения, если вы станете владельцем этого.

Комментарии:

1. Возможно, я соглашаюсь с этим, потому что вы получаете доступ к someData. Первоначальный владелец не знает, закончили ли вы с someData. Только вы знаете, что someData завершена и не нужна.