Xcode 5.0(iOS 7.0 SDK)增加了一个非常棒的新功能 - 模块(参见WWDC 2013 Session 404)。
这很棒,因为它加快了编译时间,并且无需手动链接框架。那么, Apple 框架。
苹果工程师在WWDC演讲中特别指出“模块不适用于用户框架”。我理解这意味着这样做是不可能的(或者可能会导致拒绝?)。
为什么不呢?
修改
这个问题并不意味着质疑这种限制是否“正确”。相反,“模块是否有一些限制,阻止创建用户框架的模块”?或许,一个安全漏洞......不确定为什么会出现安全问题,因为它仍然是一个静态框架?
答案 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
或其他任何内容。