蘋果是否聲明我不知道的方法[CIImage initWithImage:(CIImage*)]
?我知道的簽名的唯一方法是[CISampler initWithImage:]
。但是當我試圖提供我自己的方法時,編譯器警告我說該方法已經存在。隱藏[CIImage initWithImage:]方法?
背景:我試圖創建一個便利的方法,將NSImage
實例轉換爲CIImage
。然後,我創建了一個類別方法[CIImage initWithImage:]
,它採用NSImage
實例。
這裏是類方法聲明:
@interface CIImage (QuartzCoreExtras)
-(id) initWithImage:(NSImage*) img;
@end
我試圖用它在NSImageView
子類來緩存圖像的CoreImage版本:
-(void) setImage:(NSImage *)newImage {
[super setImage:newImage];
[ciImage release];
ciImage = [[CIImage alloc] initWithImage:newImage];
}
但是,當我編譯上面的方法,我收到一條警告,說別人已經定義了該方法,並採用不同的參數:
warning: incompatible Objective-C types 'struct NSImage *', expected 'struct CIImage *' when passing argument 1 of 'initWithImage:' from distinct Objective-C type
從XCode中的「跳轉到定義」選項,該方法的唯一其他實現(除了我自己的實現)是[CISampler initWithImage:(CIImage*]
。我對這個問題感到很困惑 - 有什麼我做錯了嗎?
只是爲了完整起見,這裏是[CIImage initWithImage:]
方法體:
@implementation CIImage (QuartzCoreExtras)
-(id) initWithImage:(NSImage*) img {
NSData* tiffData = [img TIFFRepresentation];
NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithData:tiffData];
return [self initWithBitmapImageRep:bitmap];
}
@end
在此先感謝。
如果提問者使用相同的選擇器,那麼Apple命名他們的方法並不重要,反之亦然 - 實際上,可能會有一個隱藏的' - [CIImage initWithImage:]'(或' initWithNSImage:'方法,這就是爲什麼標記任何您添加到類別中的方法的好方法,它的前綴或後綴對應用程序是唯一的。 – 2010-07-18 07:40:02
我確實包含了我的類別的頭文件,並且仍然收到編譯器警告。最終我放棄了,並命名我的方法「initWithNSImage」。 – adib 2010-07-20 04:03:18