Pergunta

Uma coisa que eu sou um pouco incerto é a diferença entre esses métodos NSMutableArray:

// Class Method Style

NSMutableData *myMutableDataInstance = [NSMutableData dataWithLength:WholeLottaData];

e

// Instance Method Style

NSMutableData *myMutableDataInstance = nil;

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

Sob o capô, o que eactly é o método da classe está fazendo aqui? Como é que diferem do método de instância?

Cheers, Doug

Foi útil?

Solução

O método de classe e cria um objecto autoreleases NSMutableArray.

O método de instância initialzes um objeto que você tem que alocar si mesmo. O código que você escreveu realmente não vai fazer nada, porque myMutableArrayInstance é nil. O método de classe é aproximadamente equivalente a esta:

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

E como observa Peter Hosey em comentários, o que realmente significa o seguinte:

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

que terá resultados diferentes da acima se o método initWithCapacity: devolve um objecto diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top