Objective-C 中的应用入口点
Entry point of an app in Objective-C
我在 Xcode 开始了一个新的 iOS 项目。文件-新-SingleViewApp
然后我选择了以下文件
并移至回收站。
然后我从 Info.plist 文件中删除了以下键:
然后我添加了一个名为main.c的C文件
main.c文件内容为:
int main(int argc, char * argv[]) {
print("hello");
}
而且令人惊讶的是,这有效,应用程序编译并 运行 并将 "hello" 写入控制台。我的问题是: main.m(而不是 main.c)不应该是应用程序的入口点吗?
文件名或其后缀没有规则:只有函数名main。您的文件可以用 C 或 Objective-C 编写,因此其后缀可以是 .c 或 .m。 Objective-C 程序毕竟是 C 程序; Objective-C是C.
但是,请注意您的应用现在无法使用 Cocoa 进行任何操作。实际上,它不是一个应用程序。它从不调用 UIApplicationMain
。它只是运行它的一行然后退出。所以有点傻。
开始您正在做的事情的一种更高效的方法是使用 macOS 命令行工具模板。观察你可以选择用 C 来写!你构建的是非常像一个C命令行工具(除了没有iOS命令行工具)。
我在 Xcode 开始了一个新的 iOS 项目。文件-新-SingleViewApp
然后我选择了以下文件
并移至回收站。
然后我从 Info.plist 文件中删除了以下键:
然后我添加了一个名为main.c的C文件 main.c文件内容为:
int main(int argc, char * argv[]) {
print("hello");
}
而且令人惊讶的是,这有效,应用程序编译并 运行 并将 "hello" 写入控制台。我的问题是: main.m(而不是 main.c)不应该是应用程序的入口点吗?
文件名或其后缀没有规则:只有函数名main。您的文件可以用 C 或 Objective-C 编写,因此其后缀可以是 .c 或 .m。 Objective-C 程序毕竟是 C 程序; Objective-C是C.
但是,请注意您的应用现在无法使用 Cocoa 进行任何操作。实际上,它不是一个应用程序。它从不调用 UIApplicationMain
。它只是运行它的一行然后退出。所以有点傻。
开始您正在做的事情的一种更高效的方法是使用 macOS 命令行工具模板。观察你可以选择用 C 来写!你构建的是非常像一个C命令行工具(除了没有iOS命令行工具)。