首页

时间和精神的房子
壹只iOS程序员的修行世界,欢迎来访

如果文章对您有所帮助
将是我最大的荣幸

iOS中的多线程技术

从很多年前开始,CPU 的频率增长就出现停滞,转而向多核的方向发展。增加核心远远比提升制程、架构要更简单。因此多线程技术也有着越来越重要的地位。

阅读建议

本文主要讲解的知识点如下:

进程与线程

并发与并行

为什么使用多线程

多线程应用实例

Pthreads介绍

NSThread接口说明

GCD的概念

NSOperation接口说明

自定义 NSOperation

限于篇幅,本文并没有把多线程相关的所有知识涵盖全面。对于没有讲清楚的地方下边将会推荐更好的文章作为延伸阅读。

进程与线程、并发与并行、为什么使用多线程三节为多线程基础支持。让你......

置顶

Xcode9 Main Thread Checker

在子程更新 UI 是一种常见的错误。这会引起 UI 更细失败、显示错误、数据损坏、甚至崩溃。

Main Thread Checker Xcode9 加入的一个独立工具,用来检测使用 Swift 和 C 语言在子线程调用 UIKit、AppKit 等必须在主线程使用的 API。

在 App 启动时,Main Thread Checker 动态的替换了所有只能在主线程调用的方法的实现(已知的在后台线程上可以安全使用的方法不会被替换),替换后的方法带有预先检查当前线程的功能,当发现非法调用时,Xcode 就会断在这行调用中。

不像其他代码诊断工具,Main Thread Check......

iOS 中 MVC 的设计理念

MVC 的概念最早出现在二十世纪八十年代的 施乐帕克实验室 中,当时施乐帕克为 Smalltalk 发明了这种程序设计模式。现在,MVC 已经成为主流的客户端编程框架,在 iOS 开发中,系统为我们实现好了公共的视图类:UIView 和控制器类 UIViewController。因此,我们几乎无法逃避开 MVC 这种设计模式。

理想MVC

MVC 将程序中的类分为三种类型Model、View、Controller,以便每种类型的类可以相互解耦提高灵活性和复用性。

Model 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。狭义来讲,Model 是对数据的封装,较现......

iOS中的设备唯一标识

在 iOS7 之前,曾经有过很多获取设备唯一标识的方法。但是它们都先后被苹果禁止掉了。这些被禁止掉的包括 UDID、Mac 地址、OpenUDID。在 iOS 7 之后,我们可以选择的唯一标识有 IDFA、IDFV、DeviceToken、UUID 四种方案。他们各有利弊,下面对他们进行对比。

IDFA

IDFA(广告标识符)可以通过如下代码来获取。

[[[UIDevice currentDevice] advertisingIdentifier] UUIDString]

有如下几种情况下 IDFA 可能被重置。

重置系统(设置 -> 通用 -> 还原......

iOS10.3 的评论系统

iOS10.3 对 App 的评论系统进行了较大的升级。主要在三个方面。

支持 App 内评分

在此之前我们要实现 App 内评分需要使用 SKStoreProductViewController。它只会在 App 内部模态打开在 AppStore 的详情页。iOS10.3 后 StoreKit 增加了支持 App 内评分的 SKStoreReviewController。它只有一个类方法 +(void)requestReview。在满足条件时它会在 App 内部弹出用来评分的 Alert。如下图所示,它只能评分,不能评论,且在没网络或调用次数频繁的时候将没有任何效果。弹出的 Ale......

Swift中的访问控制

Objective-C 拥有 4 个访问控制相关的修饰符 @public @protected @private 和 @package,他们只能用来修饰成员变量。@public 修饰的成员变量可以任何地方进行访问,@protected 修饰的成员变量可以当前类及其子类中访问,@private 修饰的成员变量只可以在当前类访问。@package 修饰的成员变量在当前 Framework 中访问。成员变量的默认修饰符为 @protected。

但是对于动态语言来说,访问控制并没有真正的意义,就算是 @private 的成员变量你仍然有无数种方式来访问他们。所以在 Objective-C 中......

如何准确判断 WebView 加载完成

正常情况下我们把处理网页加载完毕的代码放在 - (void)webViewDidFinishLoad:(UIWebView *)webView里。但 WebViewDidFinishLoad 时网页真的加载完了吗?

官方文档并没有说明 WebViewDidFinishLoad 到底在什么时候被调用,但事实证明在某些情况下 WebViewDidFinishLoad 可能不是你想要的时机。

网页重定向

当网页重定向发生时,网址被重定向几次,WebViewDidFinishLoad 就会被调用几次。所以如果你只想在最后加载完成时调用某些代码,可以通过webView.isLoadin......

使用 WebView + HTML + JavaScript + JSExport 实现图文混排

iOS 开发中图文混排除了用 CoreText 等方案以外,这里演示另外一种比较主流方案。用 WebView + HTML + JavaScript + JSExport。本文将使用这一方案来完成一个新闻客户端的详情页。

HTML 和 CSS 在界面布局和呈现上深耕多年,Android 也是借鉴 HTML 的那套方案。相比使用 Native 的方案,这样的好处显而易见。一套布局代码,相同的体验,全平台通用。每个平台都有自己的浏览器核心,WebKit 对 HTML 的解析速度也很不错。最重要的,HTML 来处理这种布局的代码量少了很多。很多跨平台的解决方案都是采用 HTML + CSS。......

开源工具 XFAssistiveTouch

Github 地址:https://github.com/xiaofei86/XFAssistiveTouch

Weibo 地址:http://weibo.com/1750985774/DyST3Czzc

XFAssistiveTouch 是仿照 iOS 系统的辅助按钮 AssistiveTouch 制作的辅助按钮。你可以用在调试等场景中使用。

Getting Started

阅读本篇博客或 README 文档 了解 XFAssistiveTouch

下载 XFAssistiveTouch 运行 Examples 文件夹中的示例查看效果

参考 Installation ......