Objective-C对象创建方法的差异

时间:2011-06-14 10:17:07

标签: objective-c initialization

这两种方法之间的主要区别是什么:

+ (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 个答案:

答案 0 :(得分:1)

第一种方法是一种类方法,它创建一个调用者不拥有且不得释放的对象。第二个(除了原始问题中的拼写错误)是一个初始化程序,由于调用者必须与+alloc一起调用它,它返回一个调用者拥有并必须释放的对象。

要获得完整的解释,包括说明哪些方法名称意味着所有权,哪些方法名称没有,请查看Apple的Memory Management Programming Guide