2009-10-21 63 views
1

有一件事我有点不清楚的是这些方法的NSMutableArray之间的区别:Cocoa-Touch。这些NSMutableData方法之间究竟有什么区别?

// Class Method Style 

NSMutableData *myMutableDataInstance = [NSMutableData dataWithLength:WholeLottaData]; 

// Instance Method Style 

NSMutableData *myMutableDataInstance = nil; 

myMutableDataInstance = [[[NSMutableData alloc] initWithLength:WholeLottaData]] autorelease]; 

引擎盖下,什么eactly是类方法,在这里做什么?它与实例方法有什么不同?

干杯, 道格

+1

顺便说一句,这些方法属于NSMutableData,而不是NSMutableArray – Vladimir 2009-10-21 11:53:03

+0

哎呀。我编辑了这个问题。感谢您的支持。 – dugla 2009-10-21 12:36:02

回答

5

类方法创建和自动释放一个NSMutableArray对象。

实例方法初始化您必须自己分配的对象。你写的代码实际上不会做任何事情,因为myMutableArrayInstancenil。类方法是大致相同的:

NSMutableArray *myMutableArrayInstance = [NSMutableArray alloc]; 
[myMutableArrayInstance initWithCapacity:WholeLottaData]; 
[myMutableArrayInstance autorelease]; 

正如彼得Hosey在评论中指出,它的真正含义是:

NSMutableArray *myMutableArrayInstance = [[[NSMutableArray alloc] 
              initWithCapacity:WholeLottaData] 
              autorelease]; 

这将有与上述不同的结果,如果initWithCapacity:方法返回一个不同的对象。

+1

或者,更准确地说,'[[[[NSMutableArray alloc] initWithCapacity:WholeLottaData] autorelease]'。请记住'init'方法可以返回一个不同的实例,或者释放接收者并返回'nil'(在这之后,你正在传递一个释放对象)。 – 2009-10-21 12:08:20

+0

是的。早上7点输入问题相当容易出错;-)。我编辑了这个问题。我明白了,所以这两种口味都会做一个分配,这正是我真正想知道的。一般来说,我可以假设这种类型的所有类方法 - 基本上集合和NSMutableData - 返回一个自动释放对象?谢谢,克里斯托弗。 – dugla 2009-10-21 12:41:03

+0

是的,返回新实例的类方法将返回自动释放对象。 – 2009-10-21 13:08:10

相关问题