4

Xcode 5.0 (iOS 7.0 SDK) 添加了一个很棒的新功能——模块(参见 WWDC 2013 Session 404)。

这很棒,因为它加快了编译时间并消除了手动链接框架的需要。好吧,Apple框架。

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

为什么不?

编辑

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

4

2 回答 2

3

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

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

自定义框架和苹果官方框架没有区别。唯一的区别是 Apple 的框架已经被一个深入了解编译器如何工作的人捆绑到一个模块中,而这对于创建一个模块来说是目前所必需的。

于 2013-09-23T03:02:28.750 回答
-1

这只是我的猜测。

新模块的工作方式类似于带有自动静态库链接的预编译头文件。最大的好处是不需要在不同的编译单元中解析相同的头文件集。编译器将预编译框​​架的头文件并使其可重用。

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

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

我的模块.h

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

一些文件.m

#define MyCountType double

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

其他文件.m

#define MyCountType unsigned int

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

那么应该是什么类型的counter_per_file呢?预编译mymodule.h时,编译器无法知道 的类型MyCountType,它可能是int,或任何东西。

于 2013-09-23T03:18:18.843 回答