Подтвердить что ты не робот

Как узнать, является ли объект автореализованным или нет?

Я немного раздражен тем, что некоторые объекты, автореализованные без меня, знают. Это, наверное, хорошо, что они есть, но если они есть, я хочу знать. В документации не указано, какие методы являются объектами autorelease, поэтому я обычно проверяю свой путь вперед, что, на мой взгляд, глупо. Например, [NSDate date] автореализует объект, а также [NSArray arrayWithObjects:...]. Как вы знаете, не сообщив вам документацию?

Я начинаю видеть шаблон, хотя такие методы, как эти, те, которые создают объекты со статической функцией, всегда возвращают автореализованный объект. Это всегда так?

4b9b3361

Ответ 1

В принципе, если вы init, copy или retain объект, за который вы отвечаете за его освобождение. Если вы этого не сделаете, вы не отвечаете за его освобождение.

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

Многие классы предоставляют методы form + className..., которую вы можете использовать для получить новый экземпляр класса. Часто упоминается как "удобство конструкторы", эти методы создают новый экземпляр класса, инициализировать его и вернуть его для использования. Хотя вы можете подумать, что вы ответственный за выпуск объектов созданный таким образом, то есть не дело в соответствии с собственностью политика, изложенная ранее. Поскольку класс создает новый объект, это ответственный за распоряжение новым объект.

Ответ 2

Подпись самого метода сообщает вам. Шаблон для методов с сигнатурами типа "classNameWithData: data1: data2" должен возвращать экземпляр alloc/init/autorelease этой вещи. Здесь есть удобства, так что вам не обязательно это делать.

Если вам не нужна версия с авторезистентностью, тогда не создавайте экземпляр их таким образом и не используйте соответствующие alloc/init и не отпускайте, когда вы закончите. Этот метод гораздо более явный и немного более склонный к ошибкам, потому что, если будет создано исключение, ваш выпускный блок может быть пропущен, но это цена, которую вы платите за его использование.