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

use*_*951 9 objective-c xcode4

我的其他程序员从网上下载了这段代码

#import "UIImage+Alpha.h"

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

@implementation UIImage (Alpha)
Run Code Online (Sandbox Code Playgroud)

我得到错误:什么原因导致Category正在实现一个方法,该方法也将由其主类实现?

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

它只被声明一次

@interface UIImage ()
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size;
@end
Run Code Online (Sandbox Code Playgroud)

即实施一次

#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();
Run Code Online (Sandbox Code Playgroud)

然后叫了一次

 CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size];
Run Code Online (Sandbox Code Playgroud)

所以没有双重声明.

所以有什么问题.

voc*_*aro 27

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

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

有关更多详细信息,请参阅此讨论.


Ila*_*ian 10

在您声明类别时,请参阅

@interface UIImage ()
Run Code Online (Sandbox Code Playgroud)

但在实施中,它就像

@implementation UIImage (Alpha)
Run Code Online (Sandbox Code Playgroud)

所以声明如下:

@interface UIImage (Alpha)
Run Code Online (Sandbox Code Playgroud)


Jay*_* Q. 5

我刚从.m文件中删除了这一点:

@interface UIImage ()
- (CGImageRef)newBorderMask:(NSUInteger)borderSize size:(CGSize)size;
@end
Run Code Online (Sandbox Code Playgroud)

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