2011-09-30 62 views
14

我創建了一個類別UINavigationBar的用下面的代碼:的ObjectiveC類別不進口,但仍運行代碼

// UINavigationBar+MyNavigationBar.m 
@interface UINavigationBar (MyNavigationBar) 

@end 

@implementation UINavigationBar (MyNavigationBar) 

- (void)drawRect:(CGRect)rect 
{ 
    UIImage *img = [UIImage imageNamed: @"header.png"]; 
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

我沒有任何地方不過#進口,在任何代碼在我的整個項目,此類別仍在運行並插入標題圖形。這怎麼可能?

回答

24

因爲編譯代碼時會在代碼中包含代碼。 #import只是使當前上下文(.h.m)知道該類別中的方法。

編譯到您的應用中的任何類別都會在您的應用運行時隨時加載。

要刪除添加到目標的類別,請從應用的Target->Build Phase->Compile Sources中刪除類別.m文件。

假設您需要一些導航欄來使用此代碼,但不是所有這些代碼,最好的方法是使用UINavigationBar。 (你要打電話[super drawRect:rect]在你的子類,順便說一句)

編輯:增加UINavigationBar的圖像的另一種方法,

在你想要的形象出現在任何視圖控制器,只需添加self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.png"]] autorelease];viewWillAppear:

+1

'編譯到您的應用中的任何類別都會在您的應用運行時隨時加載。'很高興知道,thx! – Philip007

相關問題