IOS小白入门指南

2023-11-03

        加入ios 项目已经一个多月了,本篇文章主要介绍IOS开发入门的一些基础知识,帮助想学习iOS开发的人更有效率地学习。

目录

需要的计算机基础   

开发语言选择

IOS两种开发语言的异同

Objective-C和swift的相同点:

二者的不同点:

开发环境---XCode介绍

基本信息

Simulator

系统版本(ios版本,设备指定)

单元测试

IOS设计模式与架构

Tuist工具介绍

常用的tuist命令

写在结尾


需要的计算机基础   

        在学习技术的过程中,无论是前端,移动端,还是服务端,编程语言是基础。当有编程语言基础的时候,再学习Objective-C或者Swift会很容易上手。至少熟悉一门语言(例如Java,C++),如果是只熟悉python或其他角色,那么应该先进行一门常用编程语言的学习,了解语言特性后再开始学习IOS开发。

开发语言选择

        早年的iOS开发全部采用Objective-C,2014年,苹果推出新的编程Swift,打算用它取代Objective-C。现在很多互联网大厂的app依然是Objective-C开发或者混合开发,学习使用Objective-C依然是可取的。但我个人建议新手学习使用Swift,因为Swift是苹果力推的编程语言,今后也是iOS开发的趋势。

更多链接:

Swift官方文档:About Swift — The Swift Programming Language (Swift 5.7)

中文版Apple官方Swift教程:协议 - SwiftGG

IOS两种开发语言的异同

Objective-C和swift的相同点:

        Objective-C(以下简称oc)出现过的绝大多数概念,比如引用计数、ARC(自动引用计数)、属性、协议、接口、初始化、扩展类、命名参数、匿名函数等,在Swift中继续有效(可能最多换个术语)。

        Swift和Objective-C共用一套运行时环境,Swift的类型可以桥接到Objective-C,都是原生的iOS开发语言。

二者的不同点:

  1. 最大的区别在于 iOS 兼容性,Objective-C开发的应用可以在任何可用的 iOS 版本上运行,Swift 至少需要 iOS 7
  2. UI开发的易用性上,Apple 引入了SwiftUI,使所有Apple平台构建原生UI变得非常容易,因此Swift 的优势在未来可能会越来越大。
  3. 编码速度上,Swift 是一种更现代的语言。由于更简单的语法,代码量也比OC少很多,减少代码量不仅可以加快开发过程,还可以减少错误和更快、更好的写测试。
  4. 稳定性方面,Objective-C 已经存在 30 多年了 2016 年以来一直存在swift至今才6年,这表明Swift 并不成熟,但Apple官方说Swift 也是根据 Apple Objective-C 方面的经验设计的,不断努力让 Swift 成为开发者首选。

开发环境---XCode介绍

基本信息

        IOS开发环境一般是XCode,XCode 是iOS 开发必备工具, XCode运行于苹果公司的Mac操作系统下,是苹果公司向开发人员提供的集成开发环境,用于开发Mac OS,iOS的应用程序。XCode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

        安装方式:打开macOS电脑上App Store,搜索XCode进行安装即可

Simulator

        通过Xcode有两种不同的方式来访问模拟器。第一种方法是在模拟器中运行应用程序,第二种方法是在不运行应用程序的情况下启动模拟器。

系统版本(ios版本,设备指定)

        XCode可以很方便的切换不同型号的设备,初次使用模拟器时模拟器版本与系统版本保持一致,之后系统版本可以根据需要进行修改。

        但是根据XCode版本的不同也会对模拟器系统版本有所约束,Xcode 14无法安装低版本iOS模拟器,目前只支持iOS 12.4及以上,如果需要安装低版本的模拟器,需要降低mac版本(一般不会这样),一个简单的办法是,需要单独下载对应版本的模拟器,并修改配置后才能使用(具体教程可以搜)。

单元测试

        XCTest是Xcode自带的单元测试框架,我们可以使用该框架做功能性代码的白盒单元测试,以自测并增强代码健壮性。

        我们可以在创建项目时直接勾选改选项,创建项目成功过项目目录下即可看到对应的单元测试文件夹。

IOS设计模式与架构

        新手需要了解的常见IOS架构有MVC,MVP,MVVM。

综合对比:

  1. MVC

        MVC流程一共有两种,在日常开发中都会使用到。

        一种是通过 View 接受指令,传递给 Controller,然后对模型进行修改或者查找底层数据,最后把改动渲染在视图上。另一种是通过controller接受指令,传给Model,View会直接从Model中读取数据而不是通过 Controller。

IOS开发中期待的MVC的样子如上图,由于ViewView Controller过度耦合, 导致了实际上我们的MVC的样子看起来更像下图:

Distribution — View和Model虽然分离, 但View和Controller紧耦合.

Testability — Model易于测试, 而View和Controller难以测试.

Ease of use — 相较于其他架构, 代码量最小.

  1. MVP

(Model-View-Presenter)是MVC的改良模式,和MVC的相同之处在于:Controller/Presenter负责业务逻辑,Model管理数据,View负责显示只不过是将 Controller 改名为 Presenter,同时改变了通信方向。但在MVP中,View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。

特点:

MVP之间双向通信。View Model 不通信,都通过 Presenter 传递。Presenter完全把ModelView进行了分离,主要的程序逻辑在Presenter里实现。

Distribution — 职责划分明确

Testability — 可测试性非常好, 虽然是以使用笨拙的View(VC)作为代价.

Easy of use — 代码量是MVC的两倍. 但MVP概念清晰.

  1. MVVM

MVVM模式将Presenter改名为ViewModel,基本上与MVP模式一致。唯一的区别是,它采用了双向绑定(data-binding),View的变动,自动反应在ViewModel,反之亦然。

MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model),有几大优点:

  • 低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  • 可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  • 独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
  • 可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写。

Distribution — MVVM的View的责任比MVP的View的责任更大

Testability — View Model不关心View的实现, 因此易于测试

Easy of use — MVVM的代码量与MVP相当.

Tuist工具介绍

当一起开发iOS App时,项目文件的冲突可能很快发生,为避免这种情况,可以自动生成项目文件,这就是Tuist发挥作用的地方。 使用Tuist,我们可以根据特定配置在本地生成项目,Tuist可以用于可以用Xcode开发的所有项目类型。简而言之,Tuist是一个命令行工具,可以帮助开发者生成和维护Xcode项目并与之交互。

XcodeGen是一个类似的工具https://github.com/yonaskolb/XcodeGen ),它还有助于自动创建项目文件。XCodeGen使用YAML or JSON文件,而Tuist具有Swift文件作为配置Tuist拥有Swift文件是一大优势。 在Xcode中打开Project.swift文件有助于简化编译器的所有功能,从而简化编辑过程。

常用的tuist命令

安装tuist

bash <(curl -Ls https://install.tuist.io)

初始化一个基本项目

tuist init --platform ios

更新项目依赖文件

tuist fetch --update

生成项

tuist generate

使用Xcode编辑配

tuist edit

写在结尾

以上是我总结的iOS开发需要掌握的一些内容,比较偏基础学习,很多东西也是在完成这篇博客的过程中才学习到的,若有有误的地方,欢迎大家进行指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS小白入门指南 的相关文章

  • 在 Mobile Safari 中点击

    敲击
  • 苹果拒绝任何访问UDID的应用程序,不支持Retina、iPhone 5显示屏?

    得到消息来自TNW http thenextweb com apple 2013 03 21 after a year of warnings apple will no longer accept any apps that use ud
  • UIPopViewController 不工作

    我有一个 xib 文件 其中有 h 和 m 链接 在 xib 中有一个带有 textView 的 UIView 我想要对该视图执行的操作是 当您单击按钮时将其作为 UIPopViewController 打开 这是我的代码 IBAction
  • CoreBluetooth 功能无法从 Singleton 运行

    所以我目前在 iPad 和 iPhone 之间建立了蓝牙连接 我已经在中创建了我的测试代码ViewController一切正常 现在我把它移到了 2 个经理类 第一个是CBCentralManager和一个用于CBPeripheralMan
  • 更改从 xib 加载的 UITableViewHeaderFooterView 上的背景颜色表示使用 contentView.backgroundColor

    I m 从 xib 文件创建 UITableViewHeaderFooterView https stackoverflow com a 20073742 35690 几乎一切都工作正常 问题是 现在当我尝试更改背景颜色 或者如果我在 xi
  • ios UICollectionView - 设置自动高度

    我正在使用 UICollection 视图创建 3x4 按钮矩阵 iPhone4很好看 高度也比较小 此外 集合视图不会滚动 因为它在可用空间中显示 3x4 矩阵按钮 现在 当我在 iPhone5 上运行相同的应用程序时 我看到底部按钮矩阵
  • 如何从 iOS 本机共享功能中删除某些选项? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一款 iOS 游戏 想知道如何删除 iOS 在自动共享时提供的一些本机选项 例如 分配给联系人 和 打印 我对此做了很多研究 我
  • iOS 6 中的模态视图控制器强制横向方向

    我有一个以纵向模式呈现的 UITabBarController 在其中一个选项卡上 我有一个以模态方式显示 UIViewController 的按钮 一个简单的故事板 segue 执行该操作 我希望这个模态视图以横向模式显示 但我无法让它自
  • NSString 到 TimeInterval

    我有一个 NSString 的格式00 00 00 00最初获得自 dateFormatter setDateFormat HH mm ss SS 我如何获取该字符串并将其转换为 TimeInterval 如果您 100 绝对肯定这种格式永
  • Firebase 查询 - 查找包含字符串的子项

    我在使用 Firebase 查询时遇到了一些问题 我想查询对象 其中对象子值包含特定字符串 到目前为止 我有一些看起来像这样的东西 Firebase ref Firebase alloc initWithUrl https dinosaur
  • 身份验证后如何退出 Google

    所以我的应用程序可以选择使用 Google 登录 单击 Google 提供的按钮后 将打开一个 Web 视图并让用户输入其凭据 允许应用程序访问其信息后 应用程序将用户登录并将 SignInViewController 更改为 TabBar
  • 如何为具有圆角的精灵设置物理体

    我创建了一个SKShapeNode通过以下方式 let sprite SKShapeNode rect CGRect x 20 y 10 width 40 height 20 cornerRadius 10 我也像这样设置了一个物理体 sp
  • 具有 3D 旋转功能的 CAEmitterCell

    我正在尝试使用 CAEmitterLayer 和 CAEmitterCell 重现从顶部落下的小纸片效果 到目前为止 我得到了它的 2D 动画 但是我很难让每个单元格在掉落时旋转 如何对每个粒子应用随机旋转 我尝试过 3D Transfor
  • 带有 HTML 的 UIActivityViewController

    当我将包含 HTML 内容的字符串作为数组元素传递给UIActivityViewController initWithActivityItems方法中 它不会在选定的 共享 控制器中将其呈现为 HTML 而是呈现 HTML 源 即标记而不是
  • 如何在当前视图上方创建半透明视图层?

    您可能以前见过这种情况 它在 ScoutMob 等消费时尚应用程序中变得非常流行 我正在尝试在启动时实现 60 的透明视图 该视图将覆盖我的主屏幕 解释如何使用主屏幕的功能并在点击时消失 我已经完成了整个应用程序 它从几年前就开始使用 xi
  • 识别用户是否在 iOS 6 设置中定义了本机 Facebook 帐户

    有没有办法通过 FACEBOOK SDK 3 1 和 iOS 6 知道用户是否在 iPhone 设置中定义了其 Facebook 帐户以供本机 Facebook 使用 我想要做的是 当打开我的应用程序时 如果用户在 iPhone 设置中定义
  • iOS 框架问题:类在两者中均实现

    我正在开发一个使用第三方框架类的iOS框架项目 所以我在下面添加了第三方框架链接的框架和库部分 当我在 iOS 应用程序项目中添加自定义框架时 每个类都会收到此警告 objc 3139 类 class name 在两者中均实现 privat
  • SwiftUI NavigationView 从其内部开始

    因此 我在页面视图样式的 TabView 中嵌入了一个 NavigationView 首次加载时 NavigationView 将在其内部启动 然后重新加载后即可正常显示 我不确定是什么原因造成的 我制作了一个 GIF 来更好地说明问题 这
  • 为什么我的 PFAnalytics 没有 trackAppOpeneWithLaunchOptions 函数? (IOS 银行卡)

    错误信息 PFAnalytics Type does not have a member named trackAppOpenedWithLaunchOptions 所有其他类似的功能都可以工作 例如trackAppOpenedWithLa
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权

随机推荐

  • python基础_包引入,OS模块和异常处理

    包引入 库 提供一系列的功能 1 内置库 包 不需要安装可以直接使用 安装路径在 Lip 2 第三方库 包 先pip安装在使用 安装路径在 Lip site packages 3 自定义的模块 包 有2种 a 同级目录 import 模块名
  • 「第六篇」对于电赛,我们应该看重什么?

    这几天更新了一些关于电赛的帖子 有设计方案 也有一些经验贴 大家可以在下面的链接找到 第一篇 大学生电子设计竞赛 等你来提问 第二篇 全国一等奖 经验帖 第三篇 全国电子设计竞赛 这些你必须知道的比赛细节 文末附上近十年电赛题目下载 第四篇
  • 【学习】对于AndroidStudio 中 Local History还原文件的理解

    1 理解结果 2 理解过程 2016年7月21日 星期四 因为很少使用AS的LocalHistory 所以对LocalHistory的不怎么理解 平时也就是拿来看看旧的代码 但是今天在使用LocalHistory的时候出了一个问题 就是在P
  • 一键自动状态机复用

    一键自动状态机复用 代码块 using System Collections Generic using System IO using UnityEditor using UnityEditor Animations using Unit
  • quartz报错Couldn’t obtain triggers for job:connection closed

    运行环境 springboot2 1 1 quarz2 3 0 jdk8 war包运行在tomcat9 11 00 57 624 http nio 8082 exec 2 ERROR c k f w e GlobalExceptionHan
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • Hexo搭建教程

    小白搭建教程 逢山开路 遇水架桥 亲测有效 在搭建过程中遇到问题也可以看看我这篇博客 或许有相似的问题 我这里遇到并解决的问题是 npm命令报错 没有权限 hexo g命令报错 duplicated mapping key hexo d命令
  • PC软件崩溃定位方式-windbg

    本篇适用于WINDOWS的C C 编译的程序分析 不适用于C java程序分析 windbg是微软的工具 可以去微软官方搜索下载 该工具可以调试exe 也可以导出收集dmp文件 用于后续分析 当前方式主要应用于启动的瞬间崩溃 分析步骤 启动
  • Python实现字符串分隔(华为机试)

    目录 题目描述 题目分析 测试用例 代码 传送门 题目描述 连续输入两组字符串 请按长度为8拆分每个字符串后输出新的字符数组 长度不是8整数倍的字符数组请在后面补0 输入 输出示例 输入 abc 123456789 输出 abc00000
  • 点击按钮时触发防抖

    当在React中点击按钮时触发防抖 并传递一个ID作为参数 你可以使用useRef和useCallback钩子来实现 import React useState useRef useCallback from react const But
  • 802.11 帧格式及类型

    1 帧格式 下面是802 11帧的组成结构 帧总寻此结构 从上面的结构可以知道 前俩个字节为 帧控制字段 控制字段的前2bit节为 协议类型 目前此值为 0 1 控制帧 用于竞争期间的握手通信和正向确认 结束非竞争期等 2 管理帧 主要用于
  • Altium designer10---PCB添加Logo

    安全之安全 security 博客目录导读 目录 1 生成bmp后缀的图片 画图打开 调整大小 生成bmp 2 生成PCB Logo PCB Logo Creator 图标生成器 Load加载 Convert转换 3 复制到所制作板子的PC
  • python基础八:函数

    1 函数简介 1 1语法 语法 def 函数名 形参1 形参2 形参3 代码块 函数名 调用函数 1 2介绍 函数是个对象 function 函数用来保存一些可执行的代码 在你需要的时候可以对这些语句进行多次调用 函数中保存的代码不会立即执
  • Sublime Text 4 汉化 安装Install Package Mac 安装插件

    1 下载安装包Sublime Text 4 官网选择安装包下载 下载完成直接打开 下载应用程序 运行应用程序 2 Sublime Text 4 跳过 不需要 安装Install Package工具 Text 4 不需要安装Package工具
  • Description:Web server failed to start. Port 8080 was already in use.

    APPLICATION FAILED TO START Description Web server failed to start Port 8080 was already in use Action Identify and stop
  • 顺序表——简单实现(静态数组)

    实现基于静态数组的顺序表的以下基本操作 1 初始化 2 尾插 3 尾删 4 头插 5 头删 6 读任意位置元素 7 修改任意位置元素 8 查找指定元素值的下标 9 在任意位置插入元素 实现环境 Centos6 5 vim编辑器 大体的思路
  • web前端字体居中_css文字居中怎么弄?

    CSS是一种定义样式结构如字体 颜色 位置等的语言 被用于描述网页上的信息格式化和现实的方式 下面我们来看一下css设置文字居中的方法 css可以通过为文字所在标签添加text align center样式使文字居中 text align属
  • git冲突在eclipse、idea、sourceTree上的解决方法

    一 使用eclipse时 情形一 用户1编辑A文件并提交 用户2未拉取最近代码也编辑A文件产生的冲突 用户2未提交本地仓库时 1 进入同步页面 注意 只有一个向下箭头表示未提交本地仓库 2 拉取远程文件 双击冲突文件减去编辑 将右侧代码合并
  • IT实习技能提升第一篇

    文章目录 前言 一 Git 1 基础配置 2 老板让去git上拉取代码 3 更改完代码后上推 二 QT使用步骤 1 注册QT账号挺有必要 2 同时运行两个项目 总结 前言 新入职的码农 嵌入式软件方向 提示 以下是本篇文章正文内容 下面案例
  • IOS小白入门指南

    加入ios 项目已经一个多月了 本篇文章主要介绍IOS开发入门的一些基础知识 帮助想学习iOS开发的人更有效率地学习 目录 需要的计算机基础 开发语言选择 IOS两种开发语言的异同 Objective C和swift的相同点 二者的不同点