首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS 基础技术
齐舞647
创建于2022-06-16
订阅专栏
介绍一下 iOS 基础技术
等 15 人订阅
共22篇文章
创建于2022-06-16
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
iOS GCD信号量dispatch_semaphore_t
在研究《iOS 性能监控(二)—— 主线程卡顿监控》中, 发现有一些GCD信号量的知识之前没有好好梳理过。 故本篇用来梳理一下GCD中信号量dispatch_semaphore_t相关的知识。* 一、
iOS 编写高质量Objective-C代码(一)—— 简介
目前iOS开发主推的官方语言有两种:Objective-C 和 Swift。 今天,小编帮助大家更加熟悉Objective-C,并且聊一聊如何才能编写高质量的OC代码。 谈到Objective-C语言的起源,可要比Java还要早十多年。 ~Java在1995年推出,而Objec…
iOS 编写高质量Objective-C代码(二)—— 面向对象
这篇将从面向对象的角度分析如何提高OC的代码质量。 属性(@property)是OC的一项特性。 @property:编译器会自动生成实例变量和getter和setter方法。 assign:对“纯量类型”做简单赋值操作(NSInteger、CGFloat等)。 strong:…
iOS 编写高质量Objective-C代码(三)—— 接口和API设计
选择与公司、工程相关的前缀作为类名的前缀。 为了避免重复引用第三方库带来的冲突,必要时也要为他们加上前缀区分。 在类中提供一个全能初始化方法,并在文档中写明注释。其他的初始化方法全调用此全能初始化方法。 好处:当类的结构发生改变或初始化逻辑发生改变时,只需要改动全能初始化方法即…
iOS 编写高质量Objective-C代码(四)—— 协议与分类
协议(protocol):OC中的协议与Java里的接口(interface)类似,OC不支持多继承。但是可以通过协议来实现委托模式。 分类(category):分类可以为既有类添加新的功能。分类是把“双刃剑”,用得好可以发挥OC的高动态性;用的不好,会留下很多坑。所以,通过这…
iOS 编写高质量Objective-C代码(五)—— 内存管理机制
本篇的主题是iOS中的 “内存管理机制”。 iOS 4之前,所有iOS开发者必须要手动管理内存,即手动管理对象的内存分配和释放。首先,不断插入retain、release等内存管理语句,大大加大了工作量和代码量。其次,在面对一些多线程并发操作时,开发者手动管理内存并不简单,还可…
iOS 编写高质量Objective-C代码(六)—— Block专栏
本篇的主题是iOS中的 “Block的原理及应用”。 先简单介绍一下今天的主角:block。 block(块):是一种 “ 词法闭包 ”,通过block,开发者可将代码块像对象一样传递。 1. block的数据结构: 2. block的三种类型:全局块、栈块、堆块。 1. NS…
iOS 编写高质量Objective-C代码(七)—— GCD专栏
本篇的主题是iOS中的 “ 大中枢开发 GCD ”。 先简单介绍一下今天的主角:GCD。 GCD(Grand Central Dispatch):一种与块相关的技术,提供了对线程的抽象管理(基于派发队列dispatch queue)。GCD会根据系统资源情况,适时且高效地 “创…
iOS 编写高质量Objective-C代码(八)—— 系统框架
本篇的主题是:“系统框架”。 在我们日常开发中,都会使用系统的一些框架。因此熟悉系统框架是很有必要的。 1. Foundation:基础框架。 提供了包括数据存储和持久性,文本处理,日期和时间计算,排序和过滤以及网络等功能。Foundation定义的类,协议和数据类型在整个ma…
iOS App启动优化(一)—— 了解App的启动流程
首先,我们先来区分两个启动的概念。 App点击启动前,此时App的进程还不在系统里。 需要系统新创建一个进程分配给App。(这是一次完整的App启动过程) App在冷启动后用户将App退回后台,此时App的进程还在系统里。 用户重新返回App的过程。(热启动做的事较少) 加载可…
iOS App启动优化(二)—— 使用“Time Profiler”工具监控App的启动耗时
想查看Pre-Main阶段的时间比较简单。 方案一:定时抓取主线程方法的调用堆栈,计算一段时间里的方法耗时。(Xcode中的Time Profiler就是使用的这种的方法) 方案二:对objc_msgSend方法进行hook,来得到所有方法的耗时。 第一步,打开工程,连接真机。…
iOS App启动优化(三)—— 自己做一个工具监控App的启动耗时
前两篇介绍了《iOS App的启动流程》、《Time Profiler工具的使用》。 本篇将介绍通过hook底层objc_msgSend来掌握所有Objective-C方法的执行耗时。 定义:hook是指在原有方法开始执行时,换成你指定的方法。或在原有方法的执行前后,添加执行你…
iOS 性能监控(一)—— CPU功耗监控
本篇将介绍iOS性能监控工具(QiLagMonitor)中与 “CPU功耗监控” 相关的功能模块。 市场上,我们比较熟悉的CPU架构有ARM(arm64)和Intel(x86)等等。 目前,市场上大部分的iPhone都是基于arm64架构。 因为arm架构有着功耗低的特点,因此…
iOS 性能监控(二)—— 主线程卡顿监控
本篇将介绍iOS性能监控工具(QiLagMonitor)中与 “线程卡顿监控” 相关的功能模块。 主线程runloop默认注册了五个mode:kCFRunLoopDefaultMode、UITrackingRunLoopMode、UIInitializationRunLoopM…
iOS 性能监控(三)—— 方法耗时监控
本篇将介绍iOS性能监控工具(QiLagMonitor)中与 “方法耗时监控” 相关的功能模块。 定义:hook是指在原有方法开始执行时,换成你指定的方法。或在原有方法的执行前后,添加执行你指定的方法。从而达到改变指定方法的目的。 使用runtime 的 Method Swiz…
iOS GCD信号量dispatch_semaphore_t
信号量(Semaphore)是多线程环境下的一种保护设施,可以用来保证两个或多个关键代码不被并发调用。 在进入一个关键代码段之前,线程必须获取一个信号量。一旦执行完毕,该线程就会释放信号量。等待下一个信号量被发送,线程才能继续获取到新信号量并再次执行关键代码段。 要求:线程进入…
今天我们来聊一聊WebSocket(iOS/Golang)
WebSocket = “HTTP第1次握手” + TCP的“全双工“通信 的网络协议。 首先,通过HTTP第一次握手保证连接成功。 其次,再通过TCP实现浏览器与服务器全双工(full-duplex)通信。(通过不断发ping包、pang包保持心跳) 最终,使得 “服务端” …
WebSocket双端实践(iOS/ Golang)
第一步:将Starsream导入到项目。 接着pod install。 第二步:实现WebSocket能力。 同时,我用三个Button的点击事件,分别模拟了connect(连接)、write(通信)、disconnect(断开)。 遵守并实现WebSocketDelegate…
iOS 如何抓取线程的“方法调用栈”?
本文将通过一个具体的 demo ,阐述如何进行抓栈操作。 在我们程序运行中,通常存在一个函数调用另一个函数的情况。 例如,在某个线程中,调用了 func A。在 func A 执行过程中,调用了 func B。 转移控制 :暂停 func A ,并开始执行 func B,并在 …
iOS 浅谈GPU及“App渲染流程”
—— 将 “3D坐标” 转换成 “2D坐标” ,再将 “2D坐标” 转换为 “实际有颜色的像素” 。 该阶段输入的是顶点数据(Vertex Data),顶点数据是一系列顶点的集合。顶点着色器主要的目的是把 3D 坐标转为 “2D” 坐标,同时顶点着色器可以对顶点属性进行一些基本…
下一页