IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / 岁寒
IT 2016-04-02 23:22:02 / 累计浏览 3,260

自己动手写一个 iOS 网络请求库(一)—— NSURLSession 初探

这篇讲的是,作者从一个具体目标出发——从零开始构建一个自己的 iOS 网络请求库——并选择从苹果现代的 NSURLSession 框架入手探索。文章首先简要对比了 NSURLSession 与旧有的 NSURLConnection,点明了前者在应用进入后台后更灵活的 Background Session 能力是核心优势。 随后,作者带领读者一步步动手:从创建项目、绑定按钮事件,到使用 NSURLSession.sharedSession() 发起一个最简单的 GET 请求,成功获取数据。为了更深入地理解框架行为,代码中特意引入了 sleep(5) 的延迟,验证了网络回调是在后台线程异步执行的,并未阻塞主线程。 一个有趣的发现是,当连续快速点击按钮时,请求会依次排队执行。作者据此初步推断,NSURLSession 的单例共享会话呈现出一种“异步阻塞”的队列模型。这种通过亲手编码、观察现象来反推框架内部机制的学习方式,让抽象的概念变得非常直观。文章最后附上了完整的代码示例和作者的相关开源项目。

本机暂存
IT 2016-03-14 23:44:56 / 累计浏览 3,500

iOS 开发 UI 搭建心得(二)—— 善用 xib

作者从iOS开发的实际操作出发,展示了如何善用xib来搭建UI。文章以创建一个可复用的图片文字按钮为例,详细演示了从创建xib文件、直观地设置按钮样式与圆角,到将按钮载入故事板或通过代码动态加载,最后响应点击事件的完整流程。作者指出,xib能极大地减少纯代码量,让许多界面属性通过可视化拖拽和简单配置即可完成,从而降低维护成本。尽管StoryBoard减少了单独xib文件的数量,但理解xib的原理并掌握其用法,对于构建灵活、可复用的UI模块依然至关重要。文章最后建议,在开发中应优先考虑使用xib或StoryBoard来搭建界面。

本机暂存
IT 2016-03-14 23:42:51 / 累计浏览 1,880

iOS 开发 UI 搭建心得(一)—— 驾驭 StoryBoard

这篇是 iOS 开发 UI 构建方式系列文章的开篇,主要聚焦于如何有效使用 Storyboard。作者首先点明了 Storyboard 的核心价值:它不仅仅是一个描述页面布局的 XML 文件,其更深层的作用是让多个页面及其关系可视化,并通过 Segue 提供一种直观的跳转管理方式。 文章随后分享了一个经典的“踩坑”经历:新项目运行后页面全黑。其根因在于未正确设置 Storyboard 的初始窗体(Initial View Controller),导致 APP 启动后无法加载界面。作者通过截图和简单设置清晰地展示了解决方案。 为了避免单个 Storyboard 文件变得臃肿难维护,作者重点推荐了“多 Storyboard 最佳实践”。他以实际项目重构为例,讲解了如何按功能模块(如登录、考试)划分独立的 Storyboard 文件,并详细说明了在代码中如何通过 `UIStoryboard` 类实例化并调用另一个 Storyboard 中的窗体,无论是作为初始窗体还是通过 Storyboard ID 定位。 最后,文章点出 Storyboard 与 Auto Layout 天作之合的特性,并预告了下一篇将深入探讨另一种 UI 构建方式——xib,为读者对比不同方案的优劣和适用场景做好了铺垫。

本机暂存
IT 2016-02-20 14:20:49 / 累计浏览 1,220

自己动手构建表单验证功能【iOS】

这篇讲的是如何在iOS开发中,利用Swift的`extension`特性来快速、优雅地构建一个表单验证功能。作者从一个包含邮箱、手机号和密码输入框的注册页面需求出发,演示了整个实现过程。 核心的巧妙之处在于使用了`extension`来扩展`UIButton`和`UITextField`这两个系统类。通过给`UIButton`添加`disable()`和`enable()`方法,轻松实现了按钮的半透明与禁用状态切换;通过给`UITextField`添加`validate(_:)`方法及针对邮箱、手机号、密码的专用验证方法,则将复杂的正则表达式判断封装成了简单可复用的属性与函数。 文章不仅展示了最终效果,更将实现步骤拆解得非常清晰:从分析需求(如输入框非空时按钮才可点击)、绑定事件,到编写具体的验证逻辑。例如,通过监听每个输入框的`Editing Changed`事件来实时检查所有输入框是否非空,从而动态控制按钮状态;在点击注册按钮后,再通过嵌套的`if`判断依次验证内容格式是否合法。 整个实现过程讲解得很细致,对想学习iOS基础功能开发的读者来说是个不错的参考。

本机暂存
IT 2016-02-16 22:16:42 / 累计浏览 1,920

iOS如何用代码控制以不同屏幕方向打开新页面?

这篇实战记录,正是一位开发者在面对“APP保持竖屏,但特定页面需横屏打开”这一需求时,从踩坑到解决的全过程。文章从最基础的`UIDevice.currentDevice().setValue(...)`方法实现页面旋转切入,但很快遭遇了方向被锁死、退出页面后异常横屏的典型BUG。 作者没有停留在表面,而是深入研究了`shouldAutorotate`、`supportedInterfaceOrientations`等系统回调的运作机制。关键在于,对于`TabBarController`包裹`NavigationController`这类常见复杂架构,系统判断屏幕方向的依据并非当前页面,而是根控制器。文章最终给出了自定义`TabBarController`并覆写相关方法的终极方案,并提供了完整的代码仓库供参考。对于需要精细控制屏幕方向的iOS开发者,其中对系统机制的分析和分层解决方案具有直接的实用价值。

本机暂存
IT 2016-02-09 23:04:15 / 累计浏览 2,540

自己动手打造基于 WKWebView 的混合开发框架(三)——设计插件协议以兼容 Cordova

这篇讲的是如何从零构建一个基于 WKWebView 的混合开发框架,并重点实现与 Cordova 插件的完全兼容。作者的目标很明确:让你已有的 Cordova 项目能无缝、无感知地迁移到自研的高性能框架上。 核心思路是打通 JS 与 Native 之间完整的双向数据通道。文章详细拆解了实现过程:首先通过 `window.webkit.messageHandlers` 建立了 JS 到 Swift 的传值与调用机制,并用 Console 插件作为示例。接着,为了解决 Swift 向 JS 的异步回调问题,作者设计了一个基于队列(Queue)的管理系统,每次调用将回调函数压栈并传递序号,Native 处理完再凭序号回调,从而完美复刻了 Cordova 的插件调用模式。 文章的巧妙之处在于,作者没有止步于零散的调用实现,而是进一步抽象设计了统一的 `Plugin` 基础类和插件协议。这个协议规范了 JS 层如何封装调用数据(包含 className、functionName、data 及回调 taskId),以及 Native 层如何统一反射、分发请求并管理回调。这使得新增一个兼容 Cordova 的插件变得结构清晰、流程标准。最终,这套设计被整合为一个名为 BlackHawk 的纯 Swift 开源项目,为追求性能与可控性的团队提供了一个切实可行的 Cordova 替代方案。

本机暂存
IT 2016-02-09 23:02:45 / 累计浏览 2,280

自己动手打造基于 WKWebView 的混合开发框架(二)——js 向 Native 一句话传值并反射出 Swift 对象执行指定函数

这篇讲的是在基于WKWebView的混合开发中,如何让JavaScript(JS)代码直接调用Swift编写的原生功能。作者从WKWebView的一个“屌炸天”的新特性——`window.webkit.messageHandlers`方法出发,演示了JS如何通过`postMessage`这一句话,将字符串甚至JSON对象传递到Native层。 核心的巧妙之处在于,接收到消息后,作者利用苹果开放的runtime接口,通过解析出的类名和方法名字符串,动态反射出Swift对象并执行指定函数。这意味着网页可以按需调用任意预注册的原生方法,极大地增强了混合应用的灵活性。文章提供了从注册消息处理程序、接收数据到最终反射执行的完整代码示例,并配有截图验证了每一步的结果。 作者在此基础上构建了一个名为“BlackHawk”的纯Swift高性能框架,可作为Cordova的替代方案。整个过程将原本可能复杂的跨语言调用,简化为了清晰可循的几步操作。

本机暂存
IT 2016-02-09 23:01:00 / 累计浏览 2,020

自己动手打造基于 WKWebView 的混合开发框架(一)——WKWebView 上手

这篇讲的是如何从零开始,基于 iOS 的 WKWebView 打造自己的混合开发框架。作者从 WKWebView 的优势切入——它解决了 UIWebView 的内存和性能顽疾,将渲染进程交给系统管理,还支持高达 60fps 的刷新和更直接的 JS 通信方式。 文章是典型的“上手指南”风格,手把手教学。它从最基础的代码示例开始,逐步带你完成初始化、加载网页、解决 iOS 9 默认不支持 HTTP 的 bug,再到实现错误处理和 JS 的 alert 弹窗等核心功能。每一部分都配有具体代码和效果截图,特别适合想了解混合开发底层实现的 iOS 开发者参考。 在教程之外,作者还推荐了一个名为 BlackHawk 的开源项目,它是用 Swift 实现的高性能 Cordova 替代方案。如果你对文章里的基础实现感兴趣,这个项目提供了一个更完整的工业级参考。

本机暂存
IT 2015-11-08 22:12:13 / 累计浏览 2,160

自己动手使用 Swift 打造全功能 JSON 解析、生成库

这篇讲的是作者如何从零开始,动手实现一个兼容 SwiftyJSON 核心 API 的纯 Swift JSON 库。 作者最初的动机,是源于在实际项目中使用 SwiftyJSON 时遇到过非合法长字符串导致崩溃的问题,并对实现递归取值(如 `["key"]["key1"]`)的复杂性感到好奇。于是,在一个中秋节,他决定自己动手“复刻”一个,并命名为 JSONNeverDie(永不崩溃)。 文章的核心,是清晰地拆解了整个实现思路。作者设计了两个值类型(struct):`JSONND` 作为入口负责从 `NSData` 等源解析数据;`JSONNDElement` 则专注于递归取值和类型转换。通过重载下标操作符,自然地实现了链式取值。随后,文章详细展示了如何为 `Int`、`String`、`Array` 等常见 JSON 类型实现从 `AnyObject` 到目标类型的“两级”转换,以及如何将对象序列化回格式化的 JSON 字符串。 作者不仅分享了代码,更传递了一种学习方法:通过亲自实现熟悉的工具(造轮子),能深入理解其设计精髓。最终完成的 JSONNeverDie 库,既是一个功能完备的轻量级替代品,也是这个探索过程的结晶。

本机暂存