2012-04-18 9 views
9

私の他のプログラマのダウンロードは誤りだIネットカテゴリは、プライマリクラスによって実装されるメソッドを実装している原因は何ですか?

#import "UIImage+Alpha.h" 

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

@implementation UIImage (Alpha) 

から、このコード: カテゴリーもその主要なクラスによって実装されるメソッドを実装している原因は何を?

私はファイル全体でnewBorderMaskを検索し、単語は3回だけ表示されます。

にのみそうに二重宣言がありません

#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]; 

呼ば

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

に一度、すなわち宣言しています。

だから何が問題なのですか。

答えて

27

I codeの原作者であり、Aadhiraの答えが間違っています。このメソッドのカテゴリ名は "Alpha"に変更しないでください。メソッドは拡張ではなくプライベートであるためです。

警告を回避するには、プライベートカテゴリに「PrivateAlpha」などの一意の名前を付けることをお勧めします。

詳細については、this discussionを参照してください。

+0

私は現在ライブラリを使用しています(ありがとう、ありがとう、ありがとう)、警告を削除しようとしている間にこれを見つけました。あなたがそこに警告を残した理由は何ですか? – soemarko

+0

私はクラスの拡張子をコメントアウトし、警告はすべて消えてしまいました。それはカテゴリのように思える名前は理由ではありません。 – jAckOdE

9

を参照してください、あなたはカテゴリを宣言しながら、それは

@interface UIImage() 

のようなものです。しかし、次のような実装では、それは

@implementation UIImage (Alpha) 

のようなので、それを宣言している:

@interface UIImage (Alpha) 
+0

私は男がなぜそれをしたのか知っていると思います。 @interface UIImage(アルファ)は.hファイルにあります –

5

私はちょうど私の.mファイルからこの全体のビットを削除:

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

LLVM 4.1コンパイラはもうそれを気にしていないようです。

関連する問題