Métodos privados en Objective-C, en Xcode 4.3 ¿Ya no es necesario que los declare en mi archivo de implementación?

Tengo muchas preguntas que suenan por encima de mi cabeza. Lo que no entiendo es antes de xcode 4.3. Necesité declarar las declaraciones de reenvío (para los métodos privados) en mi archivo de implementación.

Como en mi archivo .m:

// deleting this with xcode 4.3 the below code still does work // in previous versions i had to put this because otherwise the compiler can't find methodFirst @interface DetailViewController () - (void)methodFirst; - (void)methodSecond; @end @implementation DetailViewController - (void) methodSecond { // if i delete the forward declaration now adays i dont get a compiler error that he cant find method first [self methodFirst]; } - (void) methodFirst { } @end 

Ahora parece que ya no necesito hacer eso? ¿Apple actualizó el comstackdor para que ya no sea necesario presentar declaraciones?

No puedo encontrar ninguna referencia a una fuente oficial de Apple sobre este cambio. Me pregunto qué otras personas se han encontrado en su nuevo entorno.

A partir de la versión del comstackdor LLVM incluida con Xcode 4.3, si intentas llamar a un método que el comstackdor no ha visto anteriormente, buscará en el rest del bloque @implementation actual para ver si ese método se ha declarado más tarde. Si es así, usa eso y no recibe una advertencia. Por lo tanto, a partir de Xcode 4.3, hay mucha menos necesidad de declarar previamente sus métodos internos. Claramente, aún necesita declarar los métodos que están expuestos públicamente a otras clases.

Este cambio se notó en las notas de la versión de algunos betas de Xcode 4.3, pero aparentemente no se incluyó en la documentación final “Novedades de Xcode 4.3”.

A diferencia de lo que se ha sugerido en otras respuestas, esta no es solo una advertencia de “Selector no declarado” que se ha desactivado de forma predeterminada. De hecho, si está utilizando ARC, los selectores no reconocidos aún son errores difíciles. Intenta llamar a [self myNonexistentMethod] y verás; el comstackdor todavía se queja.

No hay ningún método privado en Objective-C. Lo que está pensando es la continuación de la clase, la interfaz de categoría “sin nombre” que puede declarar en su archivo .m para declarar los métodos que estarán en la implementación de la clase, pero que no están en la interfaz pública.

Nunca ha habido un requisito para declarar métodos antes de que se utilicen. Sin embargo, siempre ha sido una buena idea, y el comstackdor tiene una bandera de advertencia para indicar cuándo se utilizan los métodos que no se han visto. La razón es hacer con la convención de llamadas del sistema operativo para funciones. Los diferentes tipos, como las estructuras, los números de coma flotante, los números enteros y los punteros, pueden manejarse de diferentes maneras cuando son argumentos o valores devueltos por las funciones. De hecho, en diferentes computadoras y en diferentes sistemas operativos, se manejan de diferentes maneras. Para saber cómo manejar los argumentos y los valores devueltos para un método Objective-C, el comstackdor necesita saber la firma de ese método: cuántos argumentos de qué tipos se necesitan y qué tipo devuelve.

Si no ha visto una statement del método, entonces el comstackdor tendrá que adivinar. Si esa suposición es incorrecta, puede terminar poniendo los valores incorrectos en los argumentos, o interpretando el valor de retorno incorrectamente, o tratando de quitar algo de la stack que no existe.