前言
个人觉得前端开发进阶有几个维度,深度、广度和高度。
- 深度路线走前端专家,能够解决各种疑难病症,对前端架构底层原理很了解;
- 广度在于走大前端,对各种跨端应用,如web/h5、app、小程序开发都有经验,对整个it圈都有一定了解;
- 高度在于走管理路线,企业的技术最终是为业务服务,理解公司组织架构、企业定位的基础上,布局公司技术架构。
个人比较倾向前期进行深度和广度进阶,在精通于某一项的技术上,也要留意技术周边,扩展广度。
本文是我对ios学习的笔记,比较浅的学习,另外 android相关
学习步骤
以下是我学习的步骤
- 了解 object-c语法,推荐书籍《object-c入门》
- 了解 swift语法
- 《ios开发基础教程》
- ios官网文档
- 哔哩哔哩视频 小普小普w - ios开发入门
- Foundation、UIKIT 和 swiftUI
代码结构
-
main
main函数 -> 自动释放池 -> UIApplicationMain(永不返回,保证程序不会被销毁)-> 创建应用程序对象UIApplication ->创建应用程序的代理对象AppDelegate -> IOS13之前,将AppDelegate的window实例化,设置为keyWindow主窗口 -> 加载配置文件指定的storyboard
-
AppDelegate
iOS13之前,AppDelegate的职责是:全权处理App生命周期和UI生命周期。
从ios13开始,app的生命周期管理由appdelegate分成了appdelegate和scenedelegate两个文件。前者负责app的启动和结束以及对UIscene对象的管理,后者负责APP的状态切换(not running , inactive, active, background,Suspended)以及相关的方法调用。
程序运行时候 方法的执行顺序是:
1.application: didFinishLunchingWithOptions
2.applicationDidBecomeActive(应用程序变为活动状态)
当按下Home键之后:(程序将要取消活动状态)
1.applicationWillResignActive
2.applicationDidEnterBackground
当在后台的程序,点击进入前台的时候触发方法:
-
applicationWillEnterForeground
-
applicationDidBecomeActive
applicationWillTerminate(程序退出调用方法)
-
-
SceneDelegate
SceneDelegate 的 scene 代替了 AppDelegate 的 window
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
self.window = [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene];
AViewController *rootVc = [[AViewController alloc]init];
// rootVc.view.backgroundColor = [UIColor purpleColor];
rootVc.title = @"scene";
BViewController* bCtorller=[[BViewController alloc] init];
// 指定导航控制的根控制器
UINavigationController *rootNav = [[UINavigationController alloc]initWithRootViewController:rootVc];
// 设置根控制器导航控制
[self.window setRootViewController:rootNav];
[self.window makeKeyAndVisible];
}
-
ViewController
从alloc和init创建初始化开始。在这个类里,先调用loadView方法,然后调用viewDidLoad方法,如果没有重写loadView直接调用父类的loadView(如果里面什么也不写)就陷入了死循环。
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"viewDidLoad");
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.view addSubview:myButton];
[myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[myButton setTitle:@"button" forState:UIControlStateNormal];
myButton.frame = CGRectMake([UIScreen mainScreen].bounds.size.width / 2, [UIScreen mainScreen].bounds.size.height / 4, [UIScreen mainScreen].bounds.size.width / 5, 50);
[myButton addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
}
- (void)press {
NSLog(@"----------------pressButton----------------");
sonViewController *son = [[sonViewController alloc] init];
[self presentViewController:son animated:NO completion:nil];
}
视图将要出现的方法:viewWillAppear
视图已经出现的方法: viewDidAppear
视图将要消失: viewWillDisappear
视图已经消失: viewDidDisappear
视图销毁:dealloc
视图控制器是一个幕后的双手,控制视图的展示,特别是多个视图控制器实现跳转的时候,用到视图控制器的viewWillAppear 等一些方法。
- storyboard
- project.pbxproj 存储着Xcode工程的各项配置参数
架构
可触摸层 | Cocoa Touch layer |
---|---|
媒体层 | Media layer |
核心服务层 | Core Services layer |
核心操作系统层 | Core OS layer |
常用库
- 网络 AFNetworking 、NSURLSession
cocoapads
- 来帮助我们管理第三方依赖库的工具,将第三方依赖库以target的方式组成一个pods的工程
- 用Ruby开发,后缀.rb
- podfile使用说明
xcodebuild 自动构建命令
- archive打包操作
xcodebuild archive -workspace PROJECT_NAME.xcworkspace -scheme SCHEME_NAME -configuration release -archivePath EXPORT_ARCHIVE_PATH -archivePath:设置项⽬的归档路径
- 导出ipa⽂件
xcodebuild -exportArchive -archivePath EXPORT_ARCHIVE_PATH -exportPath EXPORT_IPA_PATH -exportOptionsPlist ExportOptionsPlistPath-allowProvisioningUpdates-exportArchive:导出ipa-exportPath:导出ipa⽂件的路径-exportOptionsPlist:⽂件导出时的配置信息-allowProvisioningUpdates:允许xcodebuild与苹果⽹站通讯,进⾏⾃动签名,证书⾃动更新,⽣成
工具
- 抓包工具 charles、Wireshark、fiddler、stream
- 异常捕获 firebase
证书
- .key 私钥,与证书配对
- .csr 请求文件,证书颁发机构使用其根证书私钥签名生成的证书公钥文件
- .cer 可将多级证书导入生成包含完整证书链的证书
- .mobileprovision 证书描述文件
- .p12 同时包含证书和私钥,一般有密码保护
- .keystore 同时包含证书和私钥
收获
推荐
欢迎关注我的前端自检清单,我和你一起成长