是什么原因导致Category实现的方法也将由其主类实现?

时间:2012-04-18 03:26:40

标签: objective-c xcode4

我的其他程序员从网上下载此代码

#import "UIImage+Alpha.h"

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

@implementation UIImage (Alpha)

我收到了错误: 是什么原因导致Category实现的方法也将由其主要类实现?

我在我的整个文件中搜索newBorderMask,这个单词只显示3次。

它只在

上宣布一次
@interface UIImage ()
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size;
@end

中实施一次
#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();

并拨打一次

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

所以没有双重声明。

那是什么问题。

3 个答案:

答案 0 :(得分:27)

我是code的原作者,而Aadhira的回答是不正确的。此方法的类别名称不应更改为“Alpha”,因为该方法是私有的,而不是扩展的一部分。

要摆脱警告,最好的解决方法是为私人类别指定一个唯一的名称,例如“PrivateAlpha”。

有关详细信息,请参阅this discussion

答案 1 :(得分:10)

请注意,在声明类别时,它就像

@interface UIImage ()

但在实施中,它就像

@implementation UIImage (Alpha)

所以声明如下:

@interface UIImage (Alpha)

答案 2 :(得分:5)

我刚从我的.m文件中删除了这一部分:

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

LLVM 4.1编译器似乎不再关心它了。