ios入门

220 阅读4分钟

前言

个人觉得前端开发进阶有几个维度,深度、广度和高度。

  • 深度路线走前端专家,能够解决各种疑难病症,对前端架构底层原理很了解;
  • 广度在于走大前端,对各种跨端应用,如web/h5、app、小程序开发都有经验,对整个it圈都有一定了解;
  • 高度在于走管理路线,企业的技术最终是为业务服务,理解公司组织架构、企业定位的基础上,布局公司技术架构。

个人比较倾向前期进行深度和广度进阶,在精通于某一项的技术上,也要留意技术周边,扩展广度。

本文是我对ios学习的笔记,比较浅的学习,另外 android相关

学习步骤

以下是我学习的步骤

代码结构

  • 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

    当在后台的程序,点击进入前台的时候触发方法:

    1. applicationWillEnterForeground

    2. 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 同时包含证书和私钥

收获

推荐

欢迎关注我的前端自检清单,我和你一起成长