兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
你这份学习路线图非常系统和全面,考虑到了 JSBox 用户的特点,设计了一条平滑且富有逻辑的进阶路径。我将在此基础上为你细化每个阶段的要点和注意事项,使其更具指导性和可操作性。 --- ## iOS 开发学习路线图(JSBox用户进阶版) ### 前言 本路线图专为有 JavaScript 基础和 JSBox 使用经验的开发者设计,旨在帮助你从 JSBox 的“中间层”开发能力,逐步过渡到更深入的 iOS 原生开发。每个阶段都注重理论与实践结合,并为你指明 JSBox API 背后对应的原生概念,助你系统地构建 iOS 开发技能体系。 ### 第一阶段:JavaScript与JSBox基础(1-2个月) **目标:** 巩固 JavaScript 基础,彻底掌握 JSBox 的核心 API,能够独立构建并调试简单的 JSBox 应用。 1. **JavaScript基础巩固** * **要点:** * **核心语法与概念:** 变量作用域(`var`, `let`, `const`)、数据类型(基本类型与引用类型)、运算符、控制流(条件语句、循环)、函数(声明、表达式、参数、返回值)。 * **面向对象:** 理解对象、原型链、`this` 上下文(尤其是在 JSBox `events` 回调中 `this` 指向 `sender` 的行为)、构造函数与类的概念(ES6 `class` 语法)。 * **ES6+ 特性:** 重点掌握箭头函数、解构赋值、模板字符串、`Promise`、`async/await`、`Map`/`Set`、模块化(`import`/`export`,理解 JSBox 目前主要支持 CommonJS 规范的 `require`/`module.exports`)。 * **错误处理:** 掌握 `try...catch` 语句。 * **注意事项:** JSBox 支持 ES6+,充分利用新特性可以编写更简洁、易读的代码。`this` 绑定在事件回调中可能与浏览器环境有所不同,需特别留意。 * **实践建议:** 多写小函数,练习不同数据结构的操作,解决 LeetCode 上一些简单的 JS 算法题。 2. **JSBox UI开发入门** * **要点:** * **UI 树结构:** 理解 JSBox 界面由嵌套的 `view` 组成,形成一个视图树。 * **核心 UI 属性与方法:** * `type`: 定义控件类型(如 `view`, `label`, `button`, `input`, `text`)。 * `props`: 设置控件属性(如 `bgcolor`, `textColor`, `font`, `text`, `title`, `cornerRadius`, `alpha`, `hidden`)。 * `layout`: 掌握基于 Auto Layout 的链式布局语法(`make.left.equalTo(...)`, `make.width.multipliedBy(...)`),理解相对定位和尺寸约束。 * `events`: 响应用户交互(如 `tapped`, `longPressed`, `changed`, `returned`, `didSelect`)。 * `views`: 定义子视图数组。 * `$(id)`: 通过 `id` 获取视图实例,进行动态操作。 * `$ui.render()`, `$ui.push()`, `$ui.pop()`: 理解页面渲染和导航栈管理。 * **常用 API:** * `$ui.alert()`, `$ui.toast()`: 用户提示。 * `$ui.loading()`: 加载状态提示。 * `$color()`, `$font()`, `$size()`, `$rect()`, `$point()`, `$insets()`: JSBox 特有的数据类型构造函数。 * **Dark Mode 适配初探:** 理解 `theme: "auto"` 和动态颜色/图片(`$color({light:..., dark:...})`)的基本用法。 * **注意事项:** Auto Layout 概念对初学者可能较难,但 JSBox 的 `make` 语法已大大简化,多练习即可掌握。UI 操作必须在主线程,耗时操作放后台。 * **实践建议:** * 尝试重现教程中的 UI 示例,确保每个控件、每个布局约束都能按预期工作。 * 尝试用不同控件组合,构建一个简单的登录界面或设置界面。 3. **小项目实战** * **要点:** * **需求分析:** 将一个想法拆解为具体的功能模块。 * **数据流:** 理解数据在不同函数、不同模块、以及用户界面之间的传递。 * **简单持久化:** 使用 `$file` 进行文件读写(文本、JSON),或使用 `$cache` 进行数据缓存。 * **基本网络请求:** 使用 `$http.get()` 获取公共 API 数据。 * **调试技巧:** 熟练使用 `console.log()` 在 JSBox 控制台进行调试。 * **代码组织:** 即使是小项目,也要开始尝试将代码分成不同的函数和文件。 * **实践建议:** * **计算器:** 实现基本运算,练习 UI 布局和事件响应。 * **剪贴板工具:** 实现获取剪贴板内容、保存到文件、格式化文本、清空剪贴板等功能。 * **API 小工具:** 利用 `hitokoto.cn` 或 `picsum.photos` 等公开 API,制作一个“随机语录”或“每日一图”的 JSBox 脚本。 ### 第二阶段:iOS平台基础知识(2-3个月) **目标:** 理解 JSBox API 背后的 iOS 原生概念,开始形成 iOS 平台的系统性认知,为未来过渡到原生开发打下理论基础。 1. **iOS系统架构概览** * **要点:** * **分层架构:** 了解 iOS 系统的核心层(Kernel, Core OS)、服务层(Core Services, Media)、框架层(Cocoa Touch)及其包含的主要框架。 * **应用沙盒(App Sandbox):** 理解每个应用都有独立的、受限的文件系统区域,以及 JSBox 中 `shared://`, `drive://`, `inbox://` 路径的特殊性。 * **权限系统:** 了解 iOS 对用户隐私和设备功能(如相机、相册、麦克风、地理位置、通讯录、通知等)的严格权限管理,以及用户授权的流程。 * **进程生命周期:** 应用启动、活跃、后台、非活跃、终止等状态。 * **注意事项:** 虽然 JSBox 抽象了大部分权限请求,但理解其原理有助于处理用户拒绝授权时的逻辑。 * **实践建议:** 查阅 Apple Developer Documentation 中关于 iOS System Architecture 的文档,结合 JSBox 的 `$app.env` API 理解不同环境。 2. **UIKit框架核心概念** * **要点:** * **视图(`UIView`)与视图控制器(`UIViewController`):** 理解 `UIView` 是 UI 的可见元素,`UIViewController` 是管理 UI 的“大脑”,它负责视图的生命周期(`viewDidLoad`, `viewWillAppear`, `viewDidAppear`, `viewDidDisappear`)和事件处理。JSBox 的 `$ui.render` 和 `$ui.push` 正是其封装。 * **视图层级与响应链(View Hierarchy & Responder Chain):** 理解视图如何嵌套,形成层级关系;理解事件(如触摸事件)如何在视图层级中传递和被响应。 * **自动布局(Auto Layout)原理:** 深入理解约束(`NSLayoutConstraint`)是基于代数方程式的布局系统,它通过数学关系而非绝对值来确定 UI 元素的位置和大小,从而实现对不同屏幕尺寸的自适应。理解约束冲突和优先级。 * **导航控制器(`UINavigationController`)和模态呈现(Modal Presentation):** 理解 `$ui.push` 和 `$ui.modal` 背后对应的原生导航方式。 * **注意事项:** 视图控制器的生命周期方法对于优化页面加载、数据刷新和资源释放非常重要。Auto Layout 是难点,但多理解其核心思想对 JSBox 布局帮助巨大。 * **实践建议:** * 在 JSBox 中,尝试在 `views` 的 `events` 中添加 `appeared`, `disappeared`, `dealloc` 等回调,观察它们的触发时机。 * 通过 JSBox 的 `layout` 调试工具(如果有)或在控制台打印 `view.frame` 来观察视图的实际布局结果。 3. **数据存储与网络(Native Perspective)** * **要点:** * **`Foundation` 框架:** 它是 iOS/macOS 开发的基础框架,提供了核心的数据类型和基本服务。理解 JSBox 的 `string`, `Array`, `Object`, `Date` 与原生 `NSString`, `NSArray`, `NSDictionary`, `NSDate` 的对应关系。 * **`URLSession`:** iOS 进行网络请求的原生框架。JSBox 的 `$http` API 是对 `URLSession` 的高级封装,了解 `URLSession` 的基本概念(`URLSessionTask`, `URLSessionDelegate`)有助于理解 `$http` 的行为和错误码。 * **JSON 解析:** 理解原生 JSON 解析(`JSONSerialization`)的机制,它与 JavaScript 的 `JSON.parse`/`JSON.stringify` 类似。 * **文件系统深度:** 了解应用沙盒中 `Documents`、`Library` (Caches/Application Support) 等标准目录的用途。 * **`UserDefaults`:** 原生用于存储小量、简单用户偏好设置的方式,JSBox 中 `$cache` 的某些实现可能与此相关。 * **`Keychain Services`:** 原生用于安全存储敏感信息(如密码、令牌)的服务,JSBox 的 `$keychain` 封装了它。 * **注意事项:** 在原生开发中,网络请求的异步性、错误处理和数据解析是重点。 * **实践建议:** * 尝试用 `$http` 请求一个公共 API,并对比响应中的 `resp.error` 和 `resp.response.statusCode`,将其与常见的 HTTP 状态码和原生网络错误码对应起来。 * 在 JSBox 中使用 `$file` 存储 JSON 数据,并尝试手动打开“文件”App 找到并查看这些文件。 4. **中型项目实战** * **要点:** * **多页面导航:** 熟练使用 `$ui.push()`, `$ui.pop()` 进行页面间跳转和数据传递。 * **数据持久化:** 结合 `$file` 和 `$cache` 存储和读取应用数据。 * **模块化:** 进一步使用 `require()` 和 `module.exports` 将代码拆分为 `model`, `view`, `controller` 等模块。 * **错误处理:** 在网络请求、文件操作、权限请求等异步操作中,统一使用 `try...catch` 和 `$ui.alert()` 进行用户友好提示。 * **实践建议:** * **增强型待办事项应用:** 增加编辑、删除、标记完成等功能,并使用文件持久化数据。 * **简易 RSS 阅读器:** 从网络获取 RSS Feed(XML 或 JSON 格式),解析内容并显示在 `list` 视图中,支持加载更多。 * **天气查询应用:** 调用天气 API(如和风天气、OpenWeatherMap),显示当前天气和未来几天预报,支持城市搜索和历史记录。 ### 第三阶段:深入iOS开发(3-4个月) **目标:** 突破 JSBox 的封装,深入理解 iOS 原生机制,能够利用 Runtime 扩展 JSBox 能力,并掌握 iOS 丰富的应用扩展开发。 1. **JSBox Runtime编程** * **要点:** * **Objective-C 对象模型:** 理解 `Class`(类)、`id`(通用对象类型)、`SEL`(方法选择器)、`IMP`(方法实现)、`Protocol`(协议)。 * **消息发送机制:** 理解 Objective-C 通过“消息”而非函数调用来执行方法。 * **核心 Runtime API:** * `$objc("ClassName")`: 获取 Objective-C 类对象。 * `obj.$methodName(arg1, arg2...)` 或 `obj.invoke("methodName:arg1:...", arg1, arg2...)`: 调用原生方法。 * `jsValue() / ocValue()`: 关键的类型转换,解决 JavaScript 对象和 Objective-C 对象之间的互操作性。 * `$define()`: 动态创建 Objective-C 类,并定义其属性和方法。这在实现复杂原生委托或自定义类时非常有用。 * `$delegate()`: 快速创建匿名委托实例,常用于实现原生协议方法。 * `$block()`: 将 JavaScript 函数包装成 Objective-C Block,作为原生 API 的回调参数。 * 内存管理(ARC 与 `retain`/`release`):理解 ARC 的基本原理,并了解在 Runtime 中手动管理对象生命周期(`$objc_retain()`, `$objc_release()`)的场景(通常用于防止被过早释放的委托对象)。 * `$defc()`: 调用 C 语言函数。 * **注意事项:** Runtime 编程是强大的黑魔法,但难度高、调试难,且可能导致应用崩溃。仅在 JSBox 现有 API 无法满足需求时使用。务必谨慎,多参考官方 Runtime 文档和示例。 * **实践建议:** * 尝试调用教程中的原生 Alert 示例,并尝试调用一些未被 JSBox 直接封装的 UIKit 方法(例如,在 `UILabel` 上设置 `numberOfLines`)。 * 尝试使用 `$define` 创建一个简单的自定义 Objective-C 类,并从 JavaScript 调用其方法。 * 尝试使用 `$delegate` 实现一个原生 `UITextFieldDelegate` 的回调,例如 `textFieldDidBeginEditing:`。 2. **iOS UI进阶** * **要点:** * **复杂布局:** 掌握 `UIStackView` (JSBox 的 `stack` 控件) 的使用,进行水平/垂直方向上的自动布局。理解 `UIScrollView` (JSBox 的 `scroll` 控件) 的内容尺寸 (`contentSize`) 概念。 * **自定义视图:** 了解如何通过组合基本控件或使用 `Core Graphics` (JSBox 的 `canvas` 控件) 进行自定义绘制。 * **动画与交互设计:** * `UIViewPropertyAnimator` (JSBox 的 `$ui.animate()`):理解基于属性的动画,如改变 `alpha`、`frame`、`transform` 等。 * `Core Animation` (核心动画):了解图层(`CALayer`)的概念,动画与图层属性的关系。 * **适配不同屏幕尺寸和方向:** 熟练使用 Auto Layout 确保界面在 iPhone 和 iPad、竖屏和横屏下都能良好显示。 * **实践建议:** * 构建一个复杂的个人信息卡片,包含头像、多行文本、多个标签,并使用 `stack` 视图进行组织。 * 尝试在 `canvas` 控件中绘制一个自定义的进度条或圆形图表。 * 实现一个滑动删除或拖拽排序的列表(如果 `list` 或 `matrix` 控件不支持,可尝试用 Runtime 扩展)。 3. **应用扩展开发** * **要点:** * **WidgetKit (桌面小组件 - iOS 14+):** 理解其“时间线(Timeline)”和“快照(Snapshot)”机制,以及有限的用户交互(JSBox 的 `$widget` API)。 * **Action Extension (分享扩展):** 理解如何从其他应用获取共享内容(`$context` API),并进行处理。 * **Keyboard Extension (键盘扩展):** 理解其输入上下文、文本操作(`$keyboard` API)和安全限制。 * **SiriKit / Shortcuts (快捷指令集成):** 理解如何将 JSBox 脚本功能暴露给 Siri 语音命令和“快捷指令”App(`$intents` API)。 * **注意事项:** 各种应用扩展都有严格的内存和性能限制,以及特定的生命周期和功能边界。 * **实践建议:** * 开发一个简单的桌面小组件,显示随机图片或当前剪贴板内容。 * 开发一个 Safari 分享扩展,能够获取当前网页的 URL 和标题,并进行自定义操作。 * 尝试在“快捷指令”App 中调用你的 JSBox 脚本,并通过 `$intents` 传递参数和返回结果。 4. **大型项目实战** * **要点:** * **架构设计:** 考虑 MVC、MVVM 等设计模式,将 Model (数据)、View (UI)、Controller (逻辑) 分离。 * **模块化深度:** 将项目拆分为多个独立的模块(例如网络层、数据存储层、UI 组件层),通过 `require` 依赖管理。 * **复杂数据流:** 处理多线程异步操作、数据同步、缓存策略。 * **错误恢复:** 实现更完善的错误提示、重试机制、数据回滚。 * **实践建议:** * **高级天气应用:** 结合多城市管理、天气预警、未来多天预报、天气地图等功能,并考虑使用桌面小组件展示核心信息。 * **本地笔记应用:** 支持 Markdown 编辑、标签分类、搜索、图片插入、iCloud 同步(利用 `$drive`)。 * **自动化工具箱:** 集合多个小功能,如图片处理、文本翻译、网址分析、文件管理等,并提供统一的 UI 和入口。 ### 第四阶段:过渡到原生开发(4-6个月) **目标:** 学习 Swift 语言和 Xcode 开发环境,理解原生 iOS 应用的完整开发流程,并尝试将 JSBox 项目重构为原生应用。 1. **Swift语言入门** * **要点:** * **语法基础:** 变量与常量、数据类型、字符串、数组、字典、控制流。 * **核心特性:** 可选值(Optionals)与安全解包、函数与闭包、结构体(Struct)与类(Class)的区别与选择。 * **面向对象:** 继承、多态、协议(Protocol)、扩展(Extension)。 * **错误处理:** `do-catch`, `try`, `throws`。 * **并发:** 了解 `Grand Central Dispatch (GCD)` 的基本概念,为 Swift 的 `async/await` 奠定基础。 * **注意事项:** Swift 是一门现代化的强类型语言,与 JavaScript 的动态性有很大不同。Optionals 是初学者常遇到的概念。 * **实践建议:** 完成 Apple 官方的《The Swift Programming Language Guide》或 Hacking with Swift 系列课程的入门部分。多写 Swift Playground。 2. **Xcode开发环境** * **要点:** * **IDE 界面:** 熟悉 Xcode 的项目导航器、文件编辑器、实用工具区、调试区。 * **项目结构:** 理解 `AppDelegate`, `SceneDelegate`, `Info.plist`, `.xcodeProject` 文件的作用。 * **Interface Builder:** 掌握 Storyboards 和 XIBs (Nib Files) 的使用,通过拖拽构建 UI。 * **连接 UI 与代码:** 理解 `IBOutlet` (连接 UI 元素到代码变量) 和 `IBAction` (连接 UI 事件到代码函数)。 * **调试工具:** 学会设置断点、单步执行、查看变量、使用 LLDB 控制台。 * **模拟器与真机:** 熟悉在模拟器和真实设备上运行和调试应用。 * **Git 版本控制:** 掌握基本的 Git 操作,管理项目代码。 * **实践建议:** * 在 Xcode 中创建一个新的空白 iOS 项目,尝试添加一些基本 UI 控件,并用 `IBOutlet` 和 `IBAction` 连接到代码。 * 学习如何使用 Xcode 的 View Hierarchy Debugger 来检查视图层级,这有助于理解 Auto Layout。 3. **原生框架学习** * **要点:** * **UIKit 深入:** * `UINavigationController`, `UITabBarController`: 原生多页面导航的实现。 * `UITableView`: 列表的实现,理解 `DataSource` 和 `Delegate` 模式。 * `UICollectionView`: 网格布局的实现。 * **程序化 Auto Layout:** 学习在代码中编写 Auto Layout 约束(使用 `NSLayoutConstraint` 或布局锚点 `NSLayoutAnchor`)。 * **Foundation 框架:** 深入 `URLSession` (网络请求)、`Codable` (数据编解码)、`DateFormatter` (日期格式化) 等。 * **SwiftUI 入门(可选,但推荐):** 了解声明式 UI 的概念,`View`, `Modifier`, `State` 管理,以及 `HStack`, `VStack`, `ZStack` 等布局容器。 * **注意事项:** UIKit 是 iOS 命令式 UI 的核心,概念繁多;SwiftUI 则是苹果力推的未来方向,但需要 iOS 13+。选择一个作为学习重点,或两者都了解。 * **实践建议:** * 尝试用 Swift/UIKit 重写一个简单的“待办事项”列表应用,体验原生 `UITableView` 的数据源和委托模式。 * 用 `URLSession` 和 `Codable` 实现一个简单的网络请求并解析 JSON。 4. **将JSBox项目转为原生** * **要点:** * **概念映射:** 将你在 JSBox 中实现的 UI 组件、布局、事件处理、数据存储等,逐一映射到 Swift/UIKit 或 SwiftUI 的原生实现。 * **代码重构:** 将 JavaScript 代码逻辑转换为 Swift 语法。 * **性能对比:** 观察原生应用在启动速度、内存占用、动画流畅度等方面的优势。 * **实践建议:** 选择一个你之前完成的“中型项目实战”中的 JSBox 项目(如天气查询、RSS 阅读器),尝试用 Swift 和 Xcode 完整地重写它。 ### 第五阶段:专业iOS开发(持续学习) **目标:** 精通 iOS 开发的高级主题,开始专业化方向探索,能够开发高质量、高性能、可维护的商业级应用。 1. **高级主题** * **内存管理与性能优化:** 深入理解 ARC、循环引用、`weak` / `unowned` 引用。使用 Instruments 工具进行性能分析(CPU、内存、图形渲染)。 * **多线程与并发编程:** 熟练使用 `Grand Central Dispatch (GCD)` 进行任务调度。了解 `OperationQueue`。深入学习 Swift 5.5+ 的结构化并发(`async/await` 任务、Actor 模型)。 * **设计模式与架构:** 深入学习 MVC、MVVM、VIPER、Clean Architecture 等常见设计模式和应用架构,选择适合自己项目的设计方案。 * **依赖注入:** 理解依赖注入的概念及其在大型项目中的应用。 * **单元测试与 UI 测试:** 学习编写自动化测试代码,提高代码质量和可维护性。 * **网络高级:** WebSocket、OAuth 认证、数据缓存、离线模式。 * **响应式编程(可选):** 学习 `Combine` (Apple 官方) 或 `RxSwift` 等响应式编程框架。 * **持续集成/持续部署 (CI/CD):** 了解 Fastlane 等工具,自动化构建、测试和部署流程。 2. **专业化方向** * **图形与游戏开发:** `Core Animation`(高级动画)、`Core Graphics`(自定义绘制)、`SpriteKit`(2D 游戏)、`SceneKit`(3D 游戏)、`Metal`(GPU 编程)。 * **音视频处理:** `AVFoundation`。 * **增强现实/虚拟现实(AR/VR):** `ARKit`。 * **机器学习:** `Core ML`(设备端机器学习推理)、`Vision`(图像识别)。 * **地理位置服务:** `CoreLocation`。 * **健康数据:** `HealthKit`。 3. **发布与运营** * **App Store Connect:** 熟悉应用提交流程、审核规则、版本管理、TestFlight (内部测试)。 * **应用分析与用户反馈:** 集成崩溃报告(如 Firebase Crashlytics)、应用分析(如 Firebase Analytics),收集用户反馈。 * **版本迭代与维护:** 理解应用更新策略、兼容性维护。 * **国际化与本地化:** 深入多语言适配,包括 UI 布局适配。 ### 学习资源推荐 1. **官方文档(权威且最新)** * [JSBox 文档与示例](https://docs.xteko.com/) * [Apple Developer Documentation](https://developer.apple.com/documentation/):iOS 开发的官方参考,无论是 Swift 语法还是框架 API,都是第一手资料。 * [The Swift Programming Language Guide](https://docs.swift.org/swift-book/index.html):Swift 语言的官方指南。 2. **在线课程(系统且实践)** * **Stanford CS193p (Developing Apps for iOS)**:斯坦福大学的 iOS 开发经典课程,免费提供视频和资料,深度和质量极高。 * **Hacking with Swift (by Paul Hudson)**:非常适合上手实践的教程网站,从 Swift 基础到 SwiftUI、UIKit 都有大量示例代码和项目。 * Udemy, Coursera, Pluralsight 等平台上的 iOS 开发课程。 3. **书籍(系统且深入)** * 《iOS编程》(Big Nerd Ranch Guide):经典入门书籍,注重实践和概念理解。 * 《Swift编程权威指南》:Swift 语言的全面参考。 * 《Advanced Swift》、《Designing iOS Apps with SwiftUI》等进阶书籍。 4. **社区与论坛** * **JSBox 社区:** 讨论 JSBox 相关问题,分享脚本。 * **Stack Overflow:** 程序员问答社区,解决具体代码问题。 * **GitHub:** 学习优秀的 iOS 开源项目,阅读源代码。 * **Apple Developer Forums:** 官方开发者论坛。 * 各类 iOS 开发者技术博客和公众号。 ### 实用学习建议 1. **循序渐进**:不要急于掌握所有内容,先专注基础,再逐步深入。确保每个阶段的目标达成。 2. **项目驱动**:理论结合实践,通过完成实际项目来学习和巩固知识,而非孤立知识点。从小项目开始,逐步挑战中型、大型项目。 3. **代码阅读与分析**:积极阅读优秀的 JSBox 脚本和 GitHub 上的 iOS 开源项目代码,理解其设计思路和实现细节。 4. **边学边做**:每学到一个新的概念或 API,立即尝试在代码中实践应用,加深理解。 5. **主动调试与排错**:学会利用 `console.log`、Xcode 调试工具(断点、步进、变量观察)来定位和解决问题。 6. **参与社区与交流**:在论坛提问、回答问题,分享你的学习心得和作品,从他人经验中学习。 7. **坚持不懈**:iOS 开发知识体系庞大,需要持续投入。保持热情,享受创造的乐趣。 8. **版本控制**:从一开始就使用 Git 进行代码版本管理。 这份路线图考虑了你作为 JSBox 用户的优势,设计了一条从 JSBox 到原生 iOS 开发的平滑过渡路径。每个阶段都有明确的学习目标和实践项目,帮助你系统地构建 iOS 开发技能体系。根据你的学习时间和进度,整个路线可能需要 1-2 年时间,但即使是前两个阶段,也能让你开发出不少实用的 JSBox 应用。 ---
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章