iOS开发
文章平均质量分 74
依旧风轻
葵花成海,你在不在
展开
-
iOS开发中的离屏渲染
在 iOS 开发中,离屏渲染(Offscreen Rendering)指的是在屏幕外进行图形渲染操作,而不是直接在当前屏幕显示的内容上进行渲染。离屏渲染通常会创建一个新的缓冲区,绘图操作会在这个缓冲区中完成,然后再将结果合成到主屏幕缓冲区中。原创 2024-07-15 12:05:20 · 658 阅读 · 0 评论 -
NSTimer的运行机制
`NSTimer` 是一个用于在 iOS 和 macOS 应用中定时执行任务的类。它的运行机制主要依赖于 run loop。原创 2024-07-10 14:19:04 · 537 阅读 · 0 评论 -
iOS 开发中,异步渲染和异步绘制
在 iOS 开发中,异步渲染(Asynchronous Rendering)和异步绘制(Asynchronous Drawing)虽然有相似之处,但它们并不是完全相同的概念。原创 2024-07-10 13:59:55 · 1186 阅读 · 0 评论 -
selfClass 与 superClass 的区别
在 Objective-C 中,`[self class]` 和 `[super class]` 都用于获取对象的类信息,但它们在运行时的行为略有不同。理解它们的区别有助于更好地掌握 Objective-C 的消息传递机制和继承关系。原创 2024-07-08 22:19:50 · 343 阅读 · 0 评论 -
Bugly的底层是怎么实现的
Bugly 是一款专业的移动应用质量监控工具,主要用于捕捉应用的崩溃、ANR 和卡顿。它通过注册信号处理器和未捕获异常处理器来捕捉崩溃信息,收集详细的堆栈、线程和环境信息。崩溃信息会先保存在本地,并在下次启动或网络恢复时上传到 Bugly 服务器。服务器会对数据进行解析和聚合,生成详细的报表和警报。除了崩溃捕获,Bugly 还提供性能监控功能,包括启动时间、卡顿和内存使用情况。原创 2024-07-08 10:28:21 · 431 阅读 · 0 评论 -
Bugly并非无所不能
在 iOS 应用因为内存占用过大而被系统 killed 的情况下,Bugly 以及大多数崩溃报告工具是无法捕获到这种类型的崩溃信息的。原因在于,当系统由于内存压力过大而终止应用时,是直接将应用进程杀死,不会触发常规的崩溃处理流程,如 `NSUncaughtExceptionHandler` 或信号处理器。因此,应用没有机会执行任何代码来记录和上报崩溃信息。原创 2024-07-08 10:05:30 · 536 阅读 · 0 评论 -
iOS 开发中不常见的专业术语
乐此不疲地把简单的问题复杂化,并把这种XX行为叫作专业。原创 2024-07-08 04:35:24 · 1096 阅读 · 0 评论 -
如何在应用运行时定期监控内存使用情况
在 iOS 应用开发中,实时监控内存使用情况对于优化性能和排查内存泄漏等问题非常重要。本文将介绍如何在应用运行时定期监控内存使用情况,使用 Swift 编写代码并结合必要的工具和库。原创 2024-07-07 19:10:07 · 896 阅读 · 0 评论 -
iOS 应用内存超过多少会收到系统内存警告 ?
通过合理处理内存警告和优化内存使用,可以显著提升应用的性能和稳定性,减少因内存不足导致的崩溃和卡顿现象。原创 2024-07-07 11:37:42 · 682 阅读 · 0 评论 -
iOS应用的内存优化
对一个 iOS 项目进行内存优化,可以从多个方面入手,确保应用在不同场景下都能高效稳定地运行。原创 2024-07-07 11:12:03 · 679 阅读 · 0 评论 -
使用 JavaScriptCore 进行跨语言调用
通过 JavaScriptCore,可以在 Native 代码中执行 JavaScript 代码,并在 JavaScript 中调用 Native 方法,实现跨语言调用。这种双向通信机制使得混合应用程序可以充分利用 JavaScript 和 Native 各自的优势,提升应用的功能性和用户体验。原创 2024-07-04 13:29:40 · 827 阅读 · 0 评论 -
实现一个优雅的 jsBridge 方案
在 iOS 项目中,有时需要实现 JavaScript 和 Native 代码之间的通信。本文介绍一种优雅的 jsBridge 实现方案,支持互相调用和回调机制,并附带详细的代码和注释。原创 2024-07-04 12:25:49 · 979 阅读 · 0 评论 -
监听 web 容器内的网络请求(错误的方案)
在 iOS 项目中使用 `WKWebView` 实现的 Web 容器,监听 Web 容器内的网络请求是一个常见需求。可以通过实现 `WKURLSchemeHandler` 协议来处理自定义的 URL scheme,从而拦截和监听网络请求。以下是一个优秀的实现方案原创 2024-07-02 01:51:25 · 336 阅读 · 0 评论 -
iOS 中,autoreleasepool 的底层实现
在 iOS 中,的底层实现基于 Objective-C 运行时(runtime)和内存管理机制。原创 2024-06-22 01:15:30 · 887 阅读 · 0 评论 -
依赖注入(Dependency Injection, DI)在 iOS 开发中的应用
依赖注入是一种设计模式,用于解除对象之间的依赖关系。通过依赖注入,一个类所依赖的对象(即依赖)由外部传递给它,而不是在类内部自己创建。这样可以降低类之间的耦合度,提高代码的可维护性和可测试性。原创 2024-06-21 22:06:20 · 1250 阅读 · 2 评论 -
使用 GCD 实现属性的多读单写
使用 Grand Central Dispatch (GCD) 实现多读单写的属性原创 2024-06-20 01:59:43 · 1228 阅读 · 0 评论 -
main() 函数执行前,具体会初始化和创建哪些全局变量 ?
在 C 语言中声明为。原创 2024-06-19 05:09:12 · 1012 阅读 · 0 评论 -
深入解析 iOS 应用启动过程:main() 函数前的四大步骤
在开发 iOS 应用时,我们通常会关注 `main()` 函数及其之后的执行逻辑,但在 `main()` 函数之前,系统已经为我们完成了许多重要的初始化工作。这些工作确保了我们的应用能够顺利启动和运行。本文将详细解析在 `main()` 函数执行前,iOS 系统所做的四大步骤。原创 2024-06-19 04:18:41 · 1363 阅读 · 0 评论 -
网络熔断机制(Circuit Breaker)
熔断器通常有三种状态:关闭(Closed)、打开(Open)和半开(Half-Open)。Closed:正常状态,所有请求都会直接发送。Open:熔断状态,所有请求都会直接失败,不会发送实际请求。Half-Open:试探状态,允许部分请求发送,如果成功则恢复到关闭状态,如果失败则返回到打开状态。原创 2024-06-16 17:14:20 · 451 阅读 · 0 评论 -
正确理解iOS中的同步锁
在 iOS 开发中,同步锁(synchronized lock)是一种用于管理多线程访问共享资源的机制,而不是某一种特定类型的锁。它涵盖了多种具体实现和技术,用于确保同一时间只有一个线程能够访问某个共享资源,从而避免数据竞争和确保数据一致性。这些同步机制的共同目标都是为了在多线程环境中保护共享资源,防止多个线程同时访问导致的竞态条件和数据不一致问题。具体使用哪种同步机制取决于具体的应用场景和需求。总结起来,同步锁是一种机制,其核心思想是通过某种锁的实现来管理多线程对共享资源的访问,确保线程安全。原创 2024-06-09 13:54:04 · 987 阅读 · 0 评论 -
为什么需要Promises ?
同步"异步操作", 避免Block多层嵌套造成的"回调地狱"原创 2023-07-12 01:04:47 · 149 阅读 · 0 评论 -
符号化的正确姿势
symbolicatecrash 是一个 exec (可执行文件), Xcode自带, iOS 15 之前的系统产生的 crash report, 可以直接被整个符号化, 文件路径可以通过。iOS 15 及之后的版本产生的 crash report, 格式有变, 已经无法使用 symbolicatecrash 符号化。使用条件: crash report 对应的 Archive 包是在本机构建的。将 .ips crash report 文件拖放到。中, 然后导出 .crash 符号化文件.原创 2023-07-10 01:13:25 · 933 阅读 · 0 评论 -
dSYM文件是什么 ?
dSYM的全称是, 所以dSYM文件就是, dSYM文件中的每个 debug symbol, 对应了一个关系, 这个关系一端是源代码里真实的符号(类名称、全局变量以及方法和函数名称), 另一端则是其定义的文件号和行号.原创 2023-07-08 23:22:01 · 2185 阅读 · 4 评论 -
根据bundleID查询App信息
已知App的bundleID, 怎样查询应用信息.原创 2023-04-04 17:46:12 · 1090 阅读 · 0 评论 -
CoreLocation的一切
Core Location 提供的服务可以确定设备的地理位置、高度和方向,或者它相对于附近iBeacon设备的位置。该框架使用设备上的所有可用组件收集数据,包括 Wi-Fi、GPS、蓝牙、磁力计、气压计和蜂窝硬件。原创 2023-03-13 21:12:18 · 426 阅读 · 0 评论 -
Swift中的Double转UInt32发生CRASH
译: 如果 source 在向零舍入后超出此类型的范围,则可能会发生运行时错误。原创 2023-03-08 15:15:37 · 498 阅读 · 0 评论 -
初识pthread
//// main.c// POSIX Threads Playground for SQI//// Created by 侯仕奇 on 2022/4/20.//#include <stdio.h>#include <pthread.h>#include <stdlib.h>void *start(char *param) { printf("%s, running the background thread which address原创 2022-04-20 23:57:12 · 125 阅读 · 0 评论 -
利用现有的 UIView 对象直接生成 UIImage 对象
向社交媒体分享图片时经常需要将现有的视图导出为图片对象.通过扩展方法快速生成UIImage对象extension UIView { func sqiScreenshotImage(_ opaque: Bool = true) -> UIImage? { UIGraphicsBeginImageContextWithOptions(self.bounds.size, opaque, 0) if let context = UIGraphicsGetCurr.原创 2021-09-02 01:02:54 · 431 阅读 · 0 评论 -
Swift 和 Objective-C 之间基本数据类型的转换
Swift 和 Objective-C 之间基本数据类型的转换整数之间// 直接使用`as`相互转换, 因为本质上是同一种类型, NSInteger 是 Int 的别名let int_0 = 2 as Intlet int_1 = int_0 as NSIntegerlet int_2 = int_1 as Int浮点数之间// 除了为字面量直接指定类型, 必须通过构造器来转换let float_0 = 2 as CGFloatlet float_1 = Float(float_0)原创 2021-08-19 00:22:43 · 478 阅读 · 0 评论 -
swift 中的 NSInteger 类型
NSInteger type in swift在Swift中, NSInteger是Int的别名, 所以它们是同一个基本数据类型, 是完全等同的./* NSObjCRuntime.h Copyright (c) 1994-2012, Apple Inc. All rights reserved.*/public typealias NSInteger = Intpublic var NSIntegerMax: Int { get }...原创 2021-08-19 00:09:22 · 662 阅读 · 0 评论 -
`swift`中字面量的默认类型
swift中字面量的默认类型The default type of literals in swift环境: Apple Swift version 5.4 (swiftlang-1205.0.26.9 clang-1205.0.19.55), macOS Big Sur 11.4Integer 整数// 默认类型为`Int`let integer_0 = 1 // 指定整数字面量的类型为`Int`let integer_1 = 1 as IntFloat 浮点数// 默认类型为原创 2021-08-19 00:03:08 · 145 阅读 · 1 评论 -
swift 中的 as 操作符
The as operator (as 操作符)对于 swift 初学者来说, as操作符尝尝使人困惑.as? operator, 可失败转换操作符 as?表示可失败的转换, 或者叫做可选转换(Optional conversion), 当转换失败, 则返回nil. 常用于Any或者AnyObject向其它类型转换. request { res, _ in if let response = res as? SQISpecifiedClass { // ... } }as!原创 2021-08-18 15:09:12 · 114 阅读 · 0 评论 -
Swift中数组字典和plist文件的转换
Swift中数组字典和plist文件的转换注意: Swfit中的Array和Dictionary是结构体,是值类型, 没有与plist相关的接口, 需要先转换为对应的Objectivc-C类型1. Array转为plist文件(Dictionary类型同理)// 可能会使用到的接口1. `Swift`高阶函数`map`(业务代码中的数组元素往往为对象类型, 需要先转换为字典类型, 此处强烈推荐使用高阶函数`map`);2. `as`转换, 不是`as?`, 也不是`as!`(若原始数据为`A原创 2020-12-23 19:38:23 · 1245 阅读 · 0 评论 -
利用无缝桥接深入理解Block的内部实现
深入理解Block的内部实现在Block内部访问外部变量//// main.m// SQIPlayground//// Created by 侯仕奇 on 2020/5/26.// Copyright © 2020 零下引力. All rights reserved.//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool {原创 2020-05-27 10:06:45 · 363 阅读 · 0 评论 -
怎样使用Block
怎样使用BlockBlock的声明// 声明的标准语法结构return_type (^block_name)(parameters);// 示例: void(^myBlock)(NSString *, NSNumber *);Block的定义标准的定义结构: ^返回值类型(参数列表){函数体}, 不过, 通场情况下返回值类型是被省略的, 因为编译器可以从存储代码块的变量中确定返回值的类型// 有参数传递^(NSString *aString, NSNumber *aNumber){/原创 2020-05-27 06:31:26 · 255 阅读 · 0 评论 -
iOS开发的磁盘清理知识汇总
CocoaPods缓存清理目标文件夹 ~/Library/Caches/Cocoapods/文件夹内容随着每次的`pod install`或者`pod update`,pod的缓存文件会慢慢增多,这些文件会保存在`~/Library/Caches/Cocoapods/`目录下清理方式// shell commandpod cache clean --all模拟器文...原创 2019-09-19 12:07:07 · 555 阅读 · 0 评论 -
iOS导航栏视图层级分析
问题概述随着 iOS 版本的提高, 导航栏视图层级和结构变得愈加复杂, 刘海屏的适配, 按钮的位置调整, 需要关注的问题越来越多.导航栏视图层级的演进iOS 9 时代iOS 10 时代iOS 11 时代的导航栏(最新)导航栏上的标题和操作按钮全部成为_UINavigationBarContentView的子视图, 类似于UITabViewCell的contentView属...原创 2019-03-25 19:43:17 · 1023 阅读 · 0 评论 -
Xcode手动导入类库的两种方式
Xcode会根据代码自动为我们导入一些类库,但有时我们也需要受到导入类库,比如在IB中使用mapView,而又没有写相关的代码,手动导入类库的两种方式如下.原创 2016-10-12 21:38:19 · 1530 阅读 · 0 评论 -
runtime方法 - class_addMethod
runtime方法 - class_addMethodofficial document 官方文档/** * Adds a new method to a class with a given name and implementation. * * @param cls The class to which to add a method. * @param name A sel...原创 2019-09-12 23:05:46 · 221 阅读 · 0 评论 -
Xcode编译报错: expected a type
分析头文件中类方法的参数类型为自定义类型, 没有导入响应的头文件.原创 2019-06-12 21:48:08 · 10674 阅读 · 0 评论