Различия в методах создания объектов Objective-C - PullRequest
0 голосов
/ 14 июня 2011

Каковы основные различия между этими двумя методами:

+ (id)videoGameWithTitle:(NSString *)newTitle publisher:(NSString *)newPublisher year:(int)newYear {
    VideoGame *game = [[[VideoGame alloc] init] autorelease];
    game.title = newTitle;
    game.publisher = newPublisher;
    game.year = newYear;

    return game;
}

- (id)initVideoGameWithTitle:(NSString *)newTitle publisher:(NSString *)newPublisher year:(int)newYear {

    self = [super init];

    if(self) {
        self.title = newTitle;
        self.publisher = newPublisher;
        self.year = newYear;
    }
    return self;
}

1 Ответ

1 голос
/ 14 июня 2011

Первый метод - это метод класса, который создает объект, которому вызывающая сторона не владеет и не должна освобождать. Второй (кроме опечатки в исходном вопросе) - это инициализатор, и, поскольку вызывающий должен вызывать его в сочетании с +alloc, он возвращает объект, который принадлежит и должен быть освобожден вызывающим.

Для полного объяснения, включая описание того, какие имена методов подразумевают владение, а какие нет, посмотрите в Руководство по программированию управления памятью Apple .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...