Каждый метод или объект должен нести ответственность за сохранение интересующего его объекта.
Его проще поддерживать.(Исключение составляют методы с именами alloc
, new
или copy
, они возвращают объект, за который вызывающая сторона отвечает за release
.)
Так что вам нужно сохранитьautorelease
потому что этот метод не существует после return
и не сможет вызывать release для него.
Объект, который вызывает cardWithCard
, должен retain
объект, если он хочет, чтобы он былбольше времени этого конкретного метода.
Код должен выглядеть примерно так:
self.myCard = [Card cardWithCard:newCard];
Это в том случае, когда myCard
объявляется так
* 1020.*
Таким образом, в этом случае свойство сохранит за вас и освободит этот объект, когда вы разместите новый объект в этом свойстве.(Если вы перезаписываете автоматически сгенерированный метод доступа, вам нужно будет самим управлять этим способом)
Если по какой-то причине вы не хотите использовать свойство ... ну, это ваш выбор :-)
Вам нужно будет сделать что-то вроде этого:
myCard = [[Card cardWithCard:newCard] retain];
, и вам понадобится что-то подобное позже
[myCard release];
Если это не тот же метод, анализатор будетcompline, и, если это тот же метод, вам, вероятно, не нужен retain
.