为什么iOS模块不适用于用户框架?

时间:2013-09-23 02:48:34

标签: ios ios7

Xcode 5.0(iOS 7.0 SDK)增加了一个非常棒的新功能 - 模块(参见WWDC 2013 Session 404)。

这很棒,因为它加快了编译时间,并且无需手动链接框架。那么, Apple 框架。

苹果工程师在WWDC演讲中特别指出“模块不适用于用户框架”。我理解这意味着这样做是不可能的(或者可能会导致拒绝?)。

为什么不呢?

修改

这个问题并不意味着质疑这种限制是否“正确”。相反,“模块是否有一些限制,阻止创建用户框架的模块”?或许,一个安全漏洞......不确定为什么会出现安全问题,因为它仍然是一个静态框架?

2 个答案:

答案 0 :(得分:3)

您可以为用户框架创建模块。它在此处记录:http://clang.llvm.org/docs/Modules.html

但是这个过程很复杂,你需要知道你正在做什么或它会崩溃,Apple目前没有提供任何文档或工具来解释如何使它工作。

自定义框架和苹果官方框架之间没有区别。唯一的区别是Apple的框架已被一个深刻理解编译器工作原理的人捆绑到一个模块中,这是创建模块当前所必需的。

答案 1 :(得分:-1)

这只是我的猜测。

新模块与预编译的头文件类似,具有自动静态库链接。最大的好处来自于不需要在不同的编译单元中解析同一组头。编译器将预编译框​​架的头文件并使其可重用。

主要问题是一个项目不能有两个预编译头。如果标头是预编译的,则每个编译单元(.m文件)中的内容必须相同。

假设您可以创建自定义模块:

mymodule.h

#ifndef MyCountType 
#    define MyCountType int
#endif
static MyCountType counter_per_file;

somefile.m

#define MyCountType double

#import "mymodule.h" // or @import "mymodule.h"

someotherfilie.m

#define MyCountType unsigned int

#import "mymodule.h" // or @import "mymodule.h"

那么counter_per_file的类型应该是什么?在预编译mymodule.h时,编译器无法知道MyCountType的类型,可能是int或其他任何内容。