2011-11-11 14 views
5

Estoy organizando mis métodos en grupos usando #pragma mark en la implementación. Pero a veces, el código de implementación del método aparece debajo del código que llama a este método, y recibo advertencias de "Instance method not found". Sucede cuando estoy usando métodos privados. ¿Cómo arreglar eso?¿Cómo hacer una declaración directa para un método privado?

Respuesta

8

método más simple es utilizar una categoría anónimo. Añadir algo como esto a la parte superior de su archivo .m, antes de que su @implementation:

@interface MyClass() 
- (void)myPrivateMethod; 
@end 
+0

+1 De las tres respuestas similares, la tuya es la más correcta. –

1

En este caso, usaría una extensión de clase dentro de su archivo de implementación para definir estos métodos. De esta manera, su API 'pública' todavía se define en su archivo de encabezado, y su archivo de implementación contiene la definición de sus métodos pseudoprivados.

YourClass.m

@interface MyClass() 

- (void)myPrivateMethod; 

@end 


@implementation MyClass 

- (void)myPublicMethod 
{ 
    // This will not throw an error or warning 
    [self myPrivateMethod]; 
} 

- (void)myPrivateMethod 
{ 
    // Do something 
} 

@end 
+2

La desventaja de utilizar una categoría con nombre es que necesita una '@implementation MyClass (PrivateMethods)' correspondiente; de ​​lo contrario, recibirá una advertencia. Solo usa una categoría anónima. – DarkDust

+0

La sintaxis preferida para una extensión de clase privada es '@interface MyClass()'. –

1

En el archivo de aplicación Class.m, puede agregar una sección de interfaz al principio y declarar funciones privadas en ese país:


@interface YourClassName (private) 

-(void)aPrivateMethod:(NSString*)aParameter; 
... 

@end 

@implementation YourClassName 
... 
@end 

Cuestiones relacionadas