构建自包含类
Posted
技术标签:
【中文标题】构建自包含类【英文标题】:Building self contained classes 【发布时间】:2013-10-21 04:36:04 【问题描述】:我的很多项目都使用了一堆类。其中一些类必须访问我创建的其他一些特殊类。因为我想让这些类尽可能独立于其他类,所以我不想让#import 行来交叉导入不属于一起的类。我想在不使用#import 行的情况下访问这些类的信息。
Apple 有一些特殊的东西可以在不导入任何东西的情况下访问。例如:
[[UIApplication sharedApplication] delegate]
或
[[UIScreen mainScreen] bounds]
我如何创建这样的类。我可以简单地做的课程
[[MyClass sharedClass] property]
或
[[MyClass sharedClass] runThis]
并可以访问它。没有任何#import 行。
注意,因为我不是在谈论普通的单身人士。一个单例,你仍然需要导入它的文件。
这可能吗?
【问题讨论】:
您可以通过适当的设计使类彼此“分离”,而不是通过不导入强制标头。 【参考方案1】:您看不到这些类的导入的原因是您将 UIKit 框架作为项目的一部分,它有效地将这些类的 .h 文件导入到 每个 类中你创造。但是,在分离方面,可以通过利用 Objective-c 中的动态调度和动态类型来执行您所描述的操作,但是您将失去编译时错误检查。
例如,我有一个 UIApplication 委托的子类,其 NSManagedInstance 属性名为“managedObjectInstance”。我不导入此子类的 .h 文件,而是使用 valueForKey: 方法,如下所示:
[((NSObject*)[UIApplication sharedApplication].delegate) valueForKey: @"managedObjectContext"];
NSObject 转换只是因为 sharedApplication 的 delegate 属性是一个 id,这意味着它不一定符合 KVO。要在不引发警告的情况下调用您知道存在于类中的方法,您可以使用 performSelector: 系列函数,如下所示
[objectOfSomeClassWeDidntImport performSelector: @selector(amethodWeKnowExists)]
【讨论】:
好的,这可能接近我想要的,但您正在访问委托上的变量。您如何访问随机类上的某些内容(属性、方法或 ivar)? 像我在第一个示例中所说的那样通过 KVO 执行的属性;在这种情况下,managedObject 是一个属性。请参阅我的编辑以了解您的下一个问题。我从来没有遇到过使用 ivar 的场景......但话说回来,你是如何在没有方法的情况下从你的班级之外获得它的?【参考方案2】:你可以做到的......
只需在 projectName-Prefix.pch
文件中进行导入
并在任何你想要的地方使用导入文件的内容。
您可以在 Resources 文件夹中找到.pch
文件。
【讨论】:
以上是关于构建自包含类的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 gcc 构建一个自包含的库(即静态合并其依赖项的库)?
使用自包含框架时,dot net core 3.1 的设置 CI 构建配置失败