2012-04-18 8 views
9

Mi otro programador descarga el código de la red¿Qué hace que Categoría esté implementando un método que también será implementado por su clase principal?

#import "UIImage+Alpha.h" 

// Private helper methods 
@interface UIImage() 
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size; 
@end 

@implementation UIImage (Alpha) 

que ha obtenido un error: ¿Qué causa Categoría está implementando un método que también será ejecutado por su clase primaria?

Busco newBorderMask en todos mis archivos y la palabra solo aparece 3 veces.

Sólo ha declarado una vez a saber, sobre

@interface UIImage() 
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size; 
@end 

en práctica una vez a saber, en

#pragma mark - 
#pragma mark Private helper methods 

// Creates a mask that makes the outer edges transparent and everything else opaque 
// The size must include the entire mask (opaque part + transparent border) 
// The caller is responsible for releasing the returned reference by calling CGImageRelease 
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size1 { 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 

y llamó una vez

CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size]; 

lo que no hay doble declaración.

¿Cuál es el problema.

Respuesta

27

I soy el autor original de code, y la respuesta de Aadhira es incorrecta. El nombre de la categoría para este método no debe cambiarse a "Alfa", ya que el método debe ser privado y no ser parte de la extensión.

Para deshacerse de la advertencia, la mejor solución es dar a la categoría privada un nombre único, como "PrivateAlpha".

Para obtener más información, consulte this discussion.

+0

Actualmente estoy usando la biblioteca (gracias, gracias, gracias) y encontré esto al intentar eliminar la advertencia. ¿Alguna razón por la que dejaste la advertencia allí? – soemarko

+0

Comente la extensión de clase y todas las advertencias se han ido. Parece que el nombre de las categorías no es la razón. – jAckOdE

9

Sede, mientras que se declara la categoría, es como

@interface UIImage() 

Pero en la aplicación, es como

@implementation UIImage (Alpha) 

Así que la declara como sigue:

@interface UIImage (Alpha) 
+0

Creo que sé por qué lo hizo el tipo. La @interface UIImage (alfa) está en los archivos .h –

5

me acaba de quitar todo este poco de mi archivo .m: no parece

@interface UIImage() 
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size; 
@end 

LLVM 4.1 compilador para cuidar de él más.

Cuestiones relacionadas