ObjectiveC类别不被导入,但仍然运行代码
我用下面的代码为UINavigationBar创build了一个类别:
// 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
我没有#import任何地方,在我的整个项目的任何代码,但是,这个类别仍在运行,并插入标题graphics。 这怎么可能?
因为编译代码时会在代码中包含代码。 #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: