Objective-C

とあるJOYSTICKのテストプログラムで、
Class Stoneが、

@implementation Stone

+(id) stone
{
	return [[[self alloc] initWithStoneImage] autorelease];
}

と、定義されていて、使う側で、

	Stone* stone = [Stone stone];


で生成しているのだが、
使う側で、

Stone *stone = [[[Stone alloc] initWithStoneImage] autorelease];

とするのと、どう違うのだろうか?
悩む。。