2012-01-02 19 views

Respuesta

7

No soy un programador de Ruby, por lo que es posible que falten algo sutil, pero parece que andand lo hace, para que pueda con seguridad método de la cadena de llamadas, incluso cuando una llamada método puede devolver nulo. Esto está integrado en Objective-C, porque los métodos de llamada en (en realidad denominados correctamente enviar mensajes a) nil son seguros y perfectamente aceptables. Los mensajes nulos siempre devuelven nulo y básicamente no son operativos. En Objective-C esto está muy bien:

id foo = [someObject objectByDoingSomething]; // foo might be nil 

id bar = [foo objectByDoingSomethingElse]; 

// If foo is nil, calling objectByDoingSomethingElse is essentially 
// a no-op and returns nil, so bar will be nil 
NSLog(@"foo: %@ bar: %@", foo, bar); 

Por lo tanto, esto está muy bien también, aunque objectByDoingSomething podría volver a cero:

id foo = [[someObject objectByDoingSomething] objectByDoingSomethingElse]; 

De The Objective-C Programming Language: "En Objective-C, que es válida para enviar un mensaje a nil, simplemente no tiene ningún efecto en el tiempo de ejecución ". Ese documento contiene más detalles sobre el exacto comportamiento de los métodos de llamada en nil en Objective-C.

Cuestiones relacionadas