Существует набор соглашений , используемых программами Какао, которые делают управление памятью намного менее подверженным ошибкам.Когда метод возвращает объект, код, вызывающий его, должен знать, владеет ли он им или нет.
То, к чему он сводится, заключается в том, что если вы пишете метод, который возвращает объект, и этот метод не 'Чтобы передать право собственности вызывающему абоненту, назвав его как-то вроде new
, alloc
, copy
и т. д., вам нужно autorelease
, прежде чем вернуть его.
Это то, что вы сообщаетео чем идет речь - «Объект, возвращенный вызывающей стороне как ссылка-владелец» означает, что вы передаете право собственности на вызывающий код.Проблема в том, что имя вашего метода указывает на иное.
Если бы я вызвал ваш метод и мне нужно было висеть на объекте, я бы вызвал на него retain
, чтобы он мне принадлежал.Мне нужно сделать это, потому что название вашего метода подразумевает, что я не владелец.До тех пор, пока вы возвращаете автоматически выпущенный объект, это правильно.Но если вы не высвободите объект автоматически, он получит счет 2: один раз, когда вы его выделили, и один раз, когда я его сохранил.Когда я наконец доберусь до его освобождения, он все равно будет иметь счет сохранения 1 и никогда не будет освобожден из памяти, что приведет к утечке памяти.