Метод класса для возврата автоматически выпущенного объекта - PullRequest
3 голосов
/ 08 февраля 2011

Я слежу за видео по разработке iPhone на iTunes U и пока все хорошо.Я думаю, что я достаточно хорошо все понял.

Дело в том, что на примерах, которые они предоставляют, они никогда не создают собственные методы классов, как те, которые вы используете в некоторых классах Foundation (например, [NSString string]), поэтомуне знаю, как мне следует создать собственный метод класса для возврата автоматически освобожденного экземпляра моего класса.

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

+ (PhotoViewController*)initWithImageView:(UIImageView*)imageView
{
    PhotoViewController *toreturn = [[PhotoViewController alloc] init];
    toreturn.imageview = imageView;
    [toreturn autorelease];
    return toreturn;
}

Большое спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

6 голосов
/ 08 февраля 2011

Метод класса может возвращать либо сохраненный, либо автоматически освобожденный объект, как вам нужно, и ваш код возвращает автоматически освобожденный объект совершенно соответствующим образом.

Однако вам, вероятно, следует назвать свой метод по-другому. Поскольку ваш метод начинается с init, это означает, что он инициализирует alloc ed-объект (и поэтому должен быть методом экземпляра, а не методом класса). Я бы предложил назвать метод photoViewControllerWithImageView:, если он собирается возвращать объект с автоматическим освобождением.

Кроме того, я бы, вероятно, написал это как return [toreturn autorelease];, но я думаю, что это мой стиль.

2 голосов
/ 08 февраля 2011

Я считаю хорошей практикой проверять, является ли toreturn значением nil или нет, прежде чем получить доступ к свойству imageview.

...