OSX-02-Mac OS应用开发系列课程大纲和章节内容设计

news2025/2/2 4:44:20

本节笔者会详细介绍下本系统专题的大纲,以及每个专题章节的组织结构。这样读者会有一个全局的概念。

在开始前还是在再介绍一下下面这个框架图,因为比较重要,在这里再冗余介绍一下。开发Apple公司相关产品的软件时,主要有两个框架可供使用:Cocoa和Cocoa Touch。Cocoa是一个开发Mac OS系统应用的开发工具包,而Cocoa Touch工具包主要用于IOS系统应用的开发,可以简单理解为Objective-C是一种编程语言,而Cocoa是开发框架,发展至今天,Apple Develop开发体系大体如下图所示:

在这里插入图片描述

上图中有几点需要详细说下明:

  • . Foundation:这是一个ObjC语言的核心扩展包。它并没有内置于Objective-C语言中,也不包含任何UI元素,所以可以在不同的平台通用,大概提供了100多个扩展类;
  • . Cocoa:MacOS系统应用开发框架,它提供了丰富用户体验的UI框架,由Foundation库、用于数据管理的CoreData框架以及AppKit图形化框架组成;
  • . Cocoa Touch:IOS系统应用开发框架,它提供了丰富用户体验的UI框架,它包括Foundation库、用于数据管理的CoreData框架以及UIKit库,UIKit可以看成是简版的Appkit,同时附加了比如wifi、gps等API;
  • Swift:一种后期开发的Apple系统应用软件的开发语言,原因是作为一门比较老的语言,
    Objective-C缺少很多现代语言所具备的高级特性。可以简单理解为Swift是为了弥补ObjC的缺陷而开发的一种语言,ObjC与Swift可以相互调用,所以在同一项目中可以并存;

Foundation是在早期的CoreFoundation框架的基础上开发的,开发时也可以使用CoreFoundation(但不建议),在帮助文件中以CF开头的全是CoreFoundation中的对象;

大概概述

大纲目录设计

下图是笔者计划在本专题中要覆盖的与MacOS应用开发相关的技术文档,主要分三大块内容:编程基础(ObjectiveC和Swift)、MacOS电脑应用开发、IOS手机应用开发。
在这里插入图片描述

本专题可以说是从0开始系列,对于Mac小白来说笔者推荐的学习路线:

  1. 先学会ObjC然后学习Foundation框架提供的核心API;
  2. 之后可以学习下Swift语言基础;
  3. 再之后学习Cocoa框架,在学习Cocoa框架过程中穿插练习之前学习的内容再随带着学习下SwiftUI编程;
  4. 至于Cocoa Touch移动开发框架,笔者安排在了最后;
  5. OXS和IOS是两个不同的开发方向,他们有很多共通之处,但OSX的开发会比IOS开发复杂一点;

大纲详细列表

以下大纲可能会随着内容的深入再做排序调整以及内容的优化,大致如下:

  1. ObjectiveC

    • 程序基础:讲述Objc编程基础内容,包括XCode使用、Hellow world入门程序、项目工程结构解析、基础数据类型、类的创建(构造函数、属性定义与存取、方法、变量修饰符)、数据运算、逻辑控制、异常处理、复杂数据类型、编译预处理等内容;
    • OOP面向对象编程:讲述ObjC高级内容,包括OOP概念、命令空间、接口和实现、继承、抽象、分类、协议、以及对象复制和序列化等操作;
    • C语言相关:ObjC是由原来的C发展而来的,所以很多C和C++中好的功能还是非常有肜了,这里主要摘取了一些与性能提升相关的一些C知识,比如指针、结构、代码块和匿名函数等;
  2. Foundition框架

    • 数据对象:一些封装的高级对象,比如集合类的NSArray 、NSSet、NSRange、NSEnumerator、NSPredicate等;
    • 文件操作:介绍一些与文件相关的操作,比如目录、文件、路径、http等资源操作的相关API,如NSFileManager、NSProcessInfo、NSFileHandle等;
    • 数据归档:介绍如何把应用数据持久化,包括xml与对象流两种形式持久化数据,同时会详细介绍下数据缓冲区的用法;
    • 内存管理:介绍下Objective-C语言的内存分布、对象引用、GC回收等相关知识,这部分的内容有助于提升App运行的效率;
    • 程序并发:了解下Objective-C下的多线程实现,以及线程池、定时任务、队列等相关并行程序执行相关的API;
  3. Swift(这部分内容基本与ObjectivC是对标的,但内容会少一点)

    • 程序基础:讲述Swift编程基础内容,也包括基础数据类型、类的创建(构造函数、属性定义与存取、方法、变量修饰符)、数据运算、逻辑控制、异常处理、复杂数据类型等内容;
    • 集合对象:包括Array、Dict、Set、Enum、Struct等API的使用;
    • OOP面向对象编程:讲述ObjC高级内容,包括OOP概念、命令空间、接口和实现、继承、抽象、分类、协议、以及对象复制和序列化等操作;
    • 高级编程:除了接口和实现、继承、抽象、分类、协议、以及对象复制和序列化等这些内容后,还会增加一个泛型的章节,这是Swift独有的功能;
  4. AppKit(Mac OS应用开发,这块的内容比较多此处罗列一部分)
    - 基础部分:介绍下OS X应用开发的相关知识,包括XCode使用、XIB、storyboard、swifui等相关相应;
    - UI容器:包括Window、Panel、View、Modal窗口、AutoLayout等UI布局相关的控件使用;
    - 基础控件:包括button、textfile、combo、checkbox、image等与表单相关的控件的使用;
    - 高级控件:包括Scroll、tableView、outlineView、page等相关的控件内容
    - 事件:包括鼠标、键盘、语音、手势等与交互相关的API;
    - 网络编程:包括RPC-XPC、http相关内容;
    - 数据存储:包括database、core data framework等相关数据持久化相关的内容,还包括KVC、KVO等与数据绑定相关的内容;
    - 服务协议:主要包括蓝牙、Bonjour、wifi、system service、message等相关服务;实现如数据传输、远程控制等功能;
    - I18N:资源国际化相关内容;
    - Cloud:云相关,如何与iCloud进行数据同步以及在多个MAC设备间实现数据共享;
    - 应用发布:发布应用到App Store上相关知识,包括Develop、sandbox、install、package、delay等相关的知识;

  5. Document应用开发
    - Document应用开发:编辑类App软件的开发;

  6. 图形应用开发
    - 图形应用开发:图形化App类软件的开发,比如图形绘制、拖动、动画等API,可实现图像处理、图绘制等应用;

  7. UIKit(IOS移动应用开发)

除了以上内容外,有可能根据需要安插一些比如Server、Database、AI相关的内容,这些内容主要会在Founction框架高级功能中讲述。

章节内容设计

基础篇内容设计

由浅入深分为基础、高级、专题三大块内容,如下图所示:
在这里插入图片描述

  1. 编程基础,主要介绍语言的语法,相当于入门,但这部分也是核心内容,需要很好的掌握;
  2. 面向对象,此处会介绍一些编程中的高级功能,掌握这些内容后就可以编写一些功能复杂的应用了;
  3. 专题技术,这部分可以按需学习,比如学习IOS编程就需要掌握wifi和gpc API,但MacOS开发则不需要掌握;

UI控件篇内容设计

做为UI控制的第一节内容,在最开始阐述下文档的结构。因为本专题是套从0开始系列,所以需要兼顾初读者和实战两种场景,所以描述Appkit的章节一般会由以下几部分组成:
在这里插入图片描述

  1. 理论和应用场景介绍,从设计和应用角度有个大概了解;(必须了解)
  2. UI设置,主要是介绍如何使用Xcode提供的可视化操作工具设计UI界面;(针对初学者,学习阶段)
  3. 编程实现,虽然UI设计可以通过拖拽方式实现,但在真实项目中基本全是用代码堆很少用拖拽的方式来设计全部的界面(除了主框架);(针对非初学者,工作阶段)
  4. 个性化功能,此UI控件独有的功能或配置;
  5. Swift实现,用Swift和Swift UI实现第3步中ObjC代码的全部功能,这部分可能不会详细讲述,参考ObjC的实现了解下对应的Swift语法即可;

初学者学习路径(建议)

笔者因为工作需要学习过很多语言,比如java、python、c++以及react、vue、jquery、javaScript这样的前端开发语言,实际来讲有些语言入门比较困难,一个原因是生态太多,另一个原理是发展方向问题。

比如java语言,在工作场景中就会分为互联网应用开发、安卓移动开发、大数据开发等,python后期可能又会分为数据分析、算法开发等,这些分支虽然用的是同一种语言但所涉及的生态完全不一样;

又如ObjectiveC语言,其生态也非常大,分支分为OSX、IOS以及小的IWatch、Framework等开发,这样庞大的生态往往会让初读者摸不到头脑进而耽误了大把时间,甚至是放弃。

所以,笔者这里给出一个学习ObjectiveC语言建议的学习路径:
在这里插入图片描述

说明:

  • ObjectiveC语言基础和Fountion框架是所有OS应用开发的基础一定要牢牢掌握;
  • 在基础掌握后,可以按自己需要是从事OSX桌面应用、还是IOS移动应用开发然后选择学习AppKit还是UIKit框架,这两个框架虽然有很多相同之处,但也有很多差异点可以说是不是兼容的,另外一点新手在学习OSX桌面应用开发时刚开始建议选择XIB做为UI,而不要选择Storyboard;
  • 对于UI界面的设计初学时可以用拖拽的方式设计,目的是为了尽快熟悉各API和控件的使用,然后再抛弃UI设计工具,因为在生产环境时UI一般全是手写代码;
  • Swift可以认为是java和kotlin的关系,在swift中主要包含两方面内容Swift和Swift UI,Swift的语言比ObjectiveC更简洁和易懂,在开发时可以混用这两种语言(但不建议)。

ObjectiveC和Swift是两种不同的语言,没有优劣之分,笔者个人的习惯是不太喜欢被封装过的东西,选择原生语言虽麻烦一点但可扩展性会比较好,也更可控。

开发环境准备

硬件配置

想学习Mac编程,首先您要有一台Mac电脑(此处不建议黑苹果),intel芯片的就行,不需要最新的M系统芯片的电脑,对于开发软件的选择在后面的文章中有详细的描述;笔者的电脑配置如下:
在这里插入图片描述

  1. 强烈建议加一个外置屏幕,现在网上有卖便携式的屏幕很方便,苹果电脑最多可以加二个外接屏,这种便携屏尽量要选择全彩的价钱一般在1000+左右(血的教训,笔者为了图便宜买了个便宜的结果非常暗看着难受,无奈又直接换了一个)。
  2. 另外intel芯片的macbook pro不要升级最新的sonna系统会非常卡,M系列的芯片主要是添加了MPU(神经网络和图像处理)支持。不过有条件的现阶段建议直接上一个M3,但性价比高的个人认为还是M2。

技术储备

虽说本专题是0基础设计,但如果您对C, C++, JAVA其中一种语言非常熟悉,那么学习起Mac编程可能会非常快。

如果您真的是一点编程知识没有,也可以按本专题顺序学习,但是还是建议您先花一周时间使用VSCode编辑器学习下html静态网页的编写熟悉下电脑编程,这样可以熟悉下编程环境。

另一个原因是ObjectiveC语言有些年头了,其中的很多术语和概念理解起来比较晦涩,这些晦涩的术语和概念在现代语言中都已改进了说法,笔者曾做过多年的java和python AI的开发,在刚接触这些术语时也着实花了一些时间。

最后别忘了在苹果官网申请一个属于自己的icloud帐号,和一个developer开发者帐号。此处建议在官网申请***.me.com帐号,而不要用国内的163、qq等邮箱(虽然也可以)。

开发参考资料

网络资料

笔者个人经验而言,开发Mac应用只需要参考三个网站即可:

  1. apple,https://developer.apple.com/cn/develop/ 用于查询文档
  2. stack,https://www.stackoverflow.com/ 用于问询细节问题
  3. github,https://www.github.com/ 下载优秀的开源项目深入学习

除了知道上述网站外,开发时可以直接从Xcode菜单中提供的入口来访问Apple Document,如下图所示:
可以Xcode的Help菜单下获取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1555355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Canvas与艺术】五角星光芒四射的效果展示

【关键点】 三一渐变式光芒的实现。 【效果】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>光芒四射</title><st…

网络安全新视角:数据可视化的力量

在当今数字化时代&#xff0c;网络安全已成为各大企业乃至国家安全的重要组成部分。随着网络攻击的日益复杂和隐蔽&#xff0c;传统的网络安全防护措施已难以满足需求&#xff0c;急需新型的解决方案以增强网络防护能力。数据可视化技术&#xff0c;作为一种将复杂数据转换为图…

IDEA报错:java.nio.charset.MalformedInputException: Input length = 1

今天启动Springboot项目的时候报错&#xff1a; 一、问题 java.nio.charset.MalformedInputException: Input length 1和Input length 2 二、原因 是因为你的配置文件里面有中文或者是你的编码格式不正确导致 三、解决方案 解决方案一&#xff1a; 改变你的编码格式改为UT…

JAVA8 新特性StreamAPI使用

一、使用StreamAPI&#xff0c;操作两个队伍中名字&#xff0c;需求如下&#xff1a; 1、第一个队伍名字为3个字的成员姓名 2、第一个队伍筛选名字为3个字之后的前三个成员 3、第二个队伍筛选姓张的成员 4、第二个队伍筛选姓张的之后跳过前两个成员 5、将两个队伍合并成一个队伍…

利用HIVE的窗口函数进行SQL查询中出现的问题记录

student_info部分数据 score_info部分数据 course_info 1、问题复现 --完整SQL selectsti.stu_id,sti.stu_name,concat_ws(",",collect_set(ci.course_name)) over(partition by sti.stu_id) fromstudent_info sti left joinscore_info sci onsti.stu_idsci.stu_id l…

标题:基于uQRCode的Vue前端二维码生成组件技术探究

摘要&#xff1a;随着移动互联网的普及&#xff0c;二维码作为信息传递的媒介在各类应用中得到了广泛使用。前端开发中&#xff0c;二维码生成功能已成为一个常见的需求。本文将深入探讨如何使用uQRCode库在Vue前端框架中封装一个二维码生成组件&#xff0c;该组件可适用于所有…

银河麒麟服务器操作系统安装SQLite数据库

SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&a…

Servlet基础 管理员注册页面

管理员注册页面 index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":&quo…

linux基础命令篇: centos7虚拟机网络配置——NAT模

linux基础命令篇&#xff1a; centos7虚拟机网络配置——NAT模式 1搞清楚NAT模式概念 在网络地址转换&#xff08;NAT&#xff09;模式下&#xff0c;虚拟机与宿主机共享一个IP地址。虚拟机的所有网络流量都会通过宿主机的IP地址进行转换&#xff0c;然后发送到外部网络。这意…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议&#xff0c;发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一&#xff0c;官网在&#xff1a; go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具&#xff0c;但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别&#xff1a; 语言支持 Postman是一个基于Chrome的应用程序&#xff0c;因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

【蓝桥杯选拔赛真题50】C++简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C简易炸弹超人 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C简易炸弹超人 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 有一块矩形游戏场地&#x…

k8s局域网通过operator部署rabbitmq

参考&#xff1a;Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像&#xff0c;这里的版本是根…

【动态规划】1223. 掷骰子模拟

作者推荐 视频算法专题 LeetCode1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数。 不过我们在使用它时有个约束&#xff0c;就是使得投掷骰子时&#xff0c;连续 掷出数字 i 的次数不能超过 rollMax[i]&#xff08;i 从 1 开始编号&#xff09…

跃然纸上的灵感再现,手绘风格的开源绘图白板工具:Excalidraw

Excalidraw&#xff1a;即绘即思&#xff0c;直观呈现未来流程图&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 在撰写文章或构建演示案例的过程中&#xff0c;为了增强视觉表现力和信息传达深度&#xff0c;适时融入图表或图形显得至关重要。Excalidraw作为一款基于…

mysql之MyBatis核心工作原理

MyBatis核心工作原理 一、源码环境 1.手动编译源码 工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释&#xff0c;我们可以自己来从官网下载源码编译生成对应的Jar包&#xff0c;然后上传到本地maven仓库&#xff0c;再引用这个Jar。大家可以自行去官…

Java 扫描某包下所有类的注解并获得注解值

背景 &#xff1a; 需求 需要获取某个包下的所有的注解 并不是全部项目的 所以 只用针对某个包 进行扫描 获取注解 数据就行 百度了一圈 spring boot 没有自带的 获取注解集合的方法 在看 php 中 hyperf 框架 看到了 这个方法 就是因为 我需求是 php 和java 合体 微服务开发 …

从代码生成工具看技术手段升级

从代码生成工具看技术手段升级 过去现在在日常工作中&#xff0c;你会用到代码生成工具吗&#xff1f;最喜欢哪一种呢&#xff1f;你一般使用代码生成工具来做什么&#xff1f;面对尚处于“成长期”的代码生成工具&#xff0c;你有哪些期待和诉求呢&#xff1f; 过去 在过去的…

小程序UI设计规范,界面设计尺寸详解

作为互联网技术的重要组成部分&#xff0c;小程序在日常生活中发挥着越来越重要的作用。因此&#xff0c;了解和严格遵守小程序的 UI 设计标准非常重要&#xff0c;它不仅可以帮助我们在保证良好用户体验的同时优化小程序&#xff0c;还可以使我们的产品在竞争激烈的市场中占据…

java中的继承和组合

继承 在java中继承指的是让类与类之间产生父子关系&#xff0c;被继承的类叫做父类或者基类、超类&#xff0c;继承的类叫做子类或者派生类。这里所说的继承和现实生活中的继承可以理解为同一个意思。当子类继承父类时&#xff0c;子类就能使用父类之中的非私有成员&#xff0c…