gpt4 book ai didi

objective-c - 未导入 Objective C 类别但仍在运行代码

转载 作者:技术小花猫 更新时间:2023-10-29 10:15:13 26 4
gpt4 key购买 nike

我使用以下代码为 UINavigationBar 创建了一个类别:

// 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,但是,这个类别仍在运行并插入标题图形。这怎么可能?

最佳答案

因为您在编译时将代码包含在您的应用程序中。 #import 只是让当前上下文(.h.m)知道该类别中的方法。

编译到您的应用中的任何类别都将在您的应用运行时随时加载。

要从您的应用程序的 Target->Build Phase->Compile Sources 中移除类别 .m 文件,将类别从添加到目标中移除。

假设您希望部分导航栏使用此代码,但不是全部,那么最好的方法可能是子类化 UINavigationBar。 (顺便说一下,您需要在子类中调用 [super drawRect:rect])

编辑:向 UINavigationBar 添加图像的替代方法,

在任何你希望图像出现的 View Controller 中,只需添加 self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.png"]] autorelease];viewWillAppear:

关于objective-c - 未导入 Objective C 类别但仍在运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com