@interface Foo()
crea una extensión de clase (I corrected, props to bbum) en la interfaz Foo que es como métodos adicionales agregados a la interfaz. Algunas personas también usan @interafce Foo(Private)
(categoría) en lugar de una extensión de clase con ()
. Es más como "inyectar" nuevos métodos en una clase desde fuera de la clase.
Colocar esto en el archivo .m solo evita que otras cosas "lo vean" en el archivo .h, pero eso es todo. Básicamente, las personas normalmente usan categorías o extensiones de clase en archivos .m para especificar interfaces privadas, pero también se usan para cosas como UIKit usa categorías para agregar los métodos públicos row
y section
a NSIndexPath. (Esto puede ser confuso.)
Realmente no necesita definir métodos privados de esta manera, pero si tiene un método llamado bar que llama al método foo antes de que foo se defina en el archivo fuente, obtendrá un compilador advirtiendo algo así como "el objeto no puede responder a foo". Puede deshacerse de eso definiendo foo antes de definir la barra o cualquier otro código foo-calling. Es lo mismo con C simple y funciones.
Like Ole dice que esto no impide que nadie llame a los métodos privados, solo declara su intención de que sean privados y hace que el compilador genere las advertencias de "no responder" incluso si importan el archivo .h .
EDITAR
Véase también http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ alguna explicación de las categorías en comparación con las extensiones de clase. Parece que las extensiones de clase deberían ser más correctas para definir métodos privados, desde una perspectiva de advertencia del compilador, porque los métodos de categoría son opcionales. ¡Ojalá mi libro hubiera explicado esto!
Hay una gran diferencia entre las categorías nombradas '(foo)' y una extensión de clase '()'. – bbum
¿Tiene una referencia a esto? No veo nada en el libro "Programación en Objective-C 2.0" sobre esto. Parece que el nombre de la categoría es simplemente opcional de todo lo que puedo decir. No es que sea un experto importante ni nada por el estilo, pero sería útil si pudiera proporcionar un enlace que explique la diferencia entre (Privado) y(). – Nimrod
No importa, parece que encontré tu blog http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ ¿Te preguntas por qué mi libro no habla de esto? – Nimrod