C语言构建的项目工程启动入口函数为main函数,OC语言创建的项目工程包含一个main.m文件(存在main函数作入口函数)
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
入口main函数主要做三件事:
- 自动释放池的创建(容器池的创建)
- 自动释放池的释放(容器池的销毁)
- 调用UIApplicationMain函数
先执行完嵌入函数本身实例(嵌入指令)。指令调用的方式触发main函数本身实例。实例对象对应堆内存区域空间本身(所开辟的堆内存区域空间本身即实例对象)。
@autoreleasepool关键字作用:要求苹果的环境机制下通过苹果移动机制创建出自动释放容器池,通过自动释放容器池实现对池内内存区域的自动释放效果即自动释放池内的实例对象(通过自动释放池来管理池内的实例对象即管理实例对象本身的内存的存在与否即通过这种机制对池内具有一定功能的对象控制延缓至不再被持有不需要使用时通过池本身的释放机制促使该实例对象内存自行释放消解。一般不会改变main函数)。
PS:延缓池内实例对象至不再需要被映射成员持有时促使无意义内存自行释放。当池内所有的实例对象都顺利释放完即池内不存在有效实例对象即容器池为空池时容器池本身也将释放。
UIApplicationMain入口函数(C语言风格体系)
int UIApplicationMain(int argc, char * _Nonnull * _Null_unspecified argv, NSString * _Nullable principalClassName, NSString * _Nullable delegateClassName)
块实例指令集相关的指令行参(具体的指令表达式需要具体的指令形参名称/声明处只单纯的声明结构特征可以省略任意的行参名称)
指令调用表达式处位置仅赋值写入