iOS开发
文章平均质量分 77
AIGCer
坚持有输出的深度学习
独立开发之路学习记录
展开
-
iOS中获取MCC和MNC的方法及iOS 16中CTCarrier被弃用的替代方案
本文主要介绍在iOS开发中如何获取移动国家代码(MCC)和移动网络代码(MNC),并探讨了在iOS 16中CTCarrier被弃用后的替代方案。我们将首先介绍使用公共API的获取方法,然后讨论使用私有API的替代方案。原创 2023-05-09 11:57:27 · 7152 阅读 · 10 评论 -
CoreData数据库探索
Core Data 是苹果公司提供的一个对象-关系映射框架(Object-Relational Mapping,ORM),用于管理应用程序的数据模型。Core Data 提供了一个抽象层,使开发人员能够使用面向对象的方式访问和操作数据,而不需要直接与底层的数据库交互。Core Data 适用于管理复杂的数据模型,包括继承、关联和多对多关系。原创 2023-03-04 16:22:24 · 966 阅读 · 0 评论 -
Swift GCD(Grand Central Dispatch)探索
在串行队列中,任务必须一个接一个地执行,因此这种队列适用于需要顺序执行任务的场景,比如在某个任务完成后执行另一个任务。并发队列可以同时执行多个任务,但是任务的执行顺序并不一定按照添加到队列中的顺序,而是取决于系统资源的可用性和任务的优先级。同步执行是在当前线程中执行任务,异步执行是在后台线程中执行任务,而栅栏执行可以在任务执行前和执行后插入其他任务。中执行的任务都将在主线程上执行,如果在主线程中执行较耗时的任务,可能会导致 UI 卡顿,因此需要将这些任务放在后台线程中执行。原创 2023-02-28 22:59:31 · 627 阅读 · 0 评论 -
SQLite WAL 机制探索
Checkpoint 是 SQLite 数据库中一个重要的机制,它用于将 WAL(Write-Ahead Logging)文件中的数据同步到数据库文件中。在 SQLite 数据库的 WAL 模式下,所有的写入操作都会首先写入到 WAL 文件中,然后再更新数据库文件。因此,在 WAL 模式下,WAL 文件中的数据和数据库文件中的数据是不一致的。Checkpoint 机制的作用就是将 WAL 文件中的数据同步到数据库文件中,以保证数据的一致性。原创 2023-02-16 11:24:51 · 1926 阅读 · 0 评论 -
iOS 奔溃EXC_BAD_ACCESS(KERN_INVALID_ADDRESS)分析
EXC_BAD_ACCESS (KERN_INVALID_ADDRESS)是一种常见的iOS应用程序崩溃错误原创 2023-02-13 18:51:00 · 6421 阅读 · 0 评论 -
Swift高效开发Tips
利用可选链式调用解决可选值问题,避免使用 if let 或者 guard let。利用泛型代码复用和简化代码。运用高阶函数,例如 map、filter 和 reduce 等,以简化数据处理。使用结构体代替类,当数据结构不需要继承或者是多态时,结构体会更加高效。使用 Enum 枚举类型来表示状态或者选项。利用协议来设计抽象层,将代码组织得更加清晰。利用 Xcode 的自动代码完成和快捷键加速开发效率。使用 Playground 进行快速原型开发和代码片段测试。使用 Source Contro原创 2023-02-12 15:58:45 · 3046 阅读 · 0 评论 -
iOS中如何高效使用Core Data
高效使用Core Data技巧:正确地设计模型:确保模型是合理的,符合领域的要求,以及避免冗余的数据。合理的使用NSFetchedResultsController:NSFetchedResultsController可以帮助你高效地管理数据,减少内存使用,以及提高效率。正确地使用预取请求:使用预取请求可以避免在大量数据请求中的频繁的磁盘访问,提高效率。避免频繁的保存:在需要的时候一次性保存所有的更改,而不是频繁的保存,避免对性能的影响。使用高效的数据类型:选择合适的数据类型,原创 2023-02-12 09:35:09 · 558 阅读 · 0 评论 -
Swift如何保证线程安全
Swift可以通过以下几种方式来保证线程安全使用互斥锁(Mutex):使用互斥锁可以防止多个线程同时访问共享数据,保证线程安全。使用OSAtomic操作:OSAtomic操作可以在多线程环境中安全地执行原子操作。使用DispatchQueue:DispatchQueue可以使用GCD技术实现线程安全。您可以使用DispatchQueue.sync和DispatchQueue.async方法在指定队列中执行任务,以保证线程安全。使用NSLock和NSCondition:NSLock和N原创 2023-02-12 09:21:32 · 1391 阅读 · 0 评论 -
Swift依赖注入之Swinject探索
介绍Swinject 是一个 Swift 语言的依赖注入框架。它通过简单易用的 API 和简洁的语法,帮助开发者实现依赖注入的解耦。Swinject 是一个轻量级的框架,不依赖任何其他第三方库,可以方便地集成到你的项目中。Swinject 的核心功能是容器(Container),容器是管理依赖关系的中心。开发者可以在容器中注册组件,并通过容器解决组件的依赖关系。Swinject 提供了丰富的 API,可以帮助开发者灵活地管理依赖关系。使用 Swinject,开发者可以更容易地实现依赖注入,解决组件之间原创 2023-02-11 15:50:39 · 1122 阅读 · 0 评论 -
Swift如何使用依赖注入进行解藕
Swift 中可以使用依赖注入(Dependency Injection)来解耦组件之间的依赖关系。依赖注入是一种设计模式,指的是在运行时,将一个组件所依赖的其他组件通过构造函数或者属性注入的方式传递给该组件。例如,有两个组件 A 和 B,A 依赖于 B。可以在 A 的构造函数中添加一个 B 的实例,并将该实例传递给 A,那么 A 就不再依赖于 B 的具体实现,而是依赖于 B 的接口。protocol BProtocol { func doSomething()}class B: BPro原创 2023-02-11 15:31:57 · 827 阅读 · 0 评论 -
iOS组件化原理探索
定义组件化是指将一个大型软件系统按照功能分解成若干个独立的、可复用的小组件,每个组件都有自己的生命周期、状态、以及与其他组件的交互方式。优点提高开发效率:组件可以复用,提高代码的重复利用率,节约开发时间。提高代码可读性:组件的独立性使得代码结构更加清晰,提高代码的可读性。提高代码可维护性:组件的独立性使得代码更加容易维护。提高代码的安全性:组件的隔离性使得代码更加安全。应用场景通常用于大型软件系统的开发,如操作系统、游戏引擎等。组件构件iOS 组件的设计和实现:需要考虑组件的职责原创 2023-02-11 15:21:39 · 2410 阅读 · 0 评论 -
Swift中依赖注入探索
⚡️什么是依赖注入依赖注入(Dependency Injection)是一种软件开发技术,它可以让程序中的组件之间保持松散耦合,从而实现组件的可重用性。依赖注入的工作原理是,程序中的组件将自己的依赖注入到容器中,容器会根据组件的依赖,自动提供所需的服务,从而实现组件的可重用性。⚡️依赖注入的有点依赖注入的优点主要有以下几点:保持松散耦合:依赖注入可以让程序中的组件之间保持松散耦合,从而提高组件的可重用性。提高可测试性:依赖注入可以让程序中的组件之间保持松散耦合,从而提高组件的可测试性。原创 2023-02-10 09:33:58 · 459 阅读 · 0 评论 -
Swfit Copy On Write 原理解析
Swift 中的 Copy On Write (COW) 技术是一种内存优化技术,其原理是在需要修改数据时才进行拷贝,以避免不必要的内存消耗。COW 的实现主要依赖于 Swift 中的结构体和类的特性。对于结构体而言,它是值类型,每次赋值都会使用新的内存地址;而类则是引用类型,每次赋值只是改变了指向内存地址的指针。原创 2023-02-09 20:35:55 · 764 阅读 · 0 评论 -
Xcode 10.0/Xcode 10.1 打包上传App Store,iOS 9系列设备用户下载app出现随机Crash解决方法
现象:Xcode 10.0/ Xcode 10.1 Workspace setting的Build system 设置为default build system 打包,上传到Test flight 测试阶段,使用iOS 9 系统手机下载测试,不会crash使用在Test flight 测试 iOS 9不会crash 的包提交App Store审核,审核通过后 用户iOS9系列设备从App S...原创 2018-12-15 14:23:47 · 1870 阅读 · 0 评论 -
iOS审核被拒:PLA 2.3 Please remove all references to pre-release versions of Apple software and hardware
2018年10月18日 上午7:39发件人 Apple0. 10.0 Before You Submit: Program License AgreementPLA 2.3Your app or its metadata contains references to a pre-release version of Apple software or hardware. Apps with...原创 2018-10-18 11:19:53 · 532 阅读 · 0 评论 -
iPhone XR/XS/XS Max 适配,最全iPhone尺寸
iPhone 比较 https://www.apple.com/iphone/compare/原创 2018-09-18 18:40:24 · 30626 阅读 · 0 评论 -
iOS Autolayout 之 Masonry 布局
MasonryMasonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装NSAutoLayout, 简洁明了并具有高可读性 而且同时支持 iOS 和 Max OS X。使用Masonry能够使用简单的语法进行Autolayout布局Masonry常用属性与NSLayoutAttrubute的对照表如下 Masonry NSAutoLayout 说...原创 2018-04-03 17:45:26 · 573 阅读 · 0 评论 -
CGAffineTransform 进行仿射变换
CGAffineTransform已知某个形状的点集合,需要在某个坐标系下面(view、layer)绘图,绘图之后需要对这个形状进行缩放(放大、缩小)、平移、旋转操作,这时就需要用到CGAffineTransform来进行仿射变换。CGAffineTransform 原理根据学过的矩阵变换知识,对于三维坐标系下的一个坐标点(x,y,z),可以使用一个三维矩阵来进行变化来任意操作(x,y,z)。 类原创 2017-12-07 13:09:24 · 1670 阅读 · 0 评论 -
Siri 语音识别 Speech
在 2016 年的 WWDC 上,Apple 介绍了一个十分有用的语音识别 API,那就是 Speech 框架。Speech 框架能够帮助你快速的集成语音输入的功能到APP。 2016 年的 WWDC Speech 框架视频下面介绍一下简单的集成过程。 1 获取APP 授权信息 - 麦克风的使用 NSMicrophoneUsageDescription - 语音的识别 NSSpeech原创 2017-10-13 16:01:32 · 2105 阅读 · 0 评论 -
1 、Quartz 2D绘图基础
Quartz 2D绘图Quartz 2D绘图的核心API是CGContextRef,该API专门用于绘制各种图形。关注微信公众号:ioscoding ,分享优质iOS编程技术。by:shuju1.1 Quartz 2D绘图基础:CGContextRef使用Quartz 2D绘图的关键步骤有两步:获取CGContextRef;调用CGContextRef的方法进行绘图。不同原创 2015-04-08 12:04:47 · 689 阅读 · 0 评论 -
【iOS数据存储】iOS文件系统介绍
iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用程序包:包含了所有的资源文件和可执行文件(更多精彩,尽在微信公众号ioscoding,每日推送iOS最前沿技术)Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。原创 2015-04-09 14:20:33 · 773 阅读 · 0 评论 -
TextFiled 控制键盘只可以输入数字(TextFiled only allow number input)
TextFiled 控制键盘只可以输入数字(TextFiled only allow number input)原创 2015-12-16 15:05:45 · 486 阅读 · 0 评论 -
Compiling iOS library/framework with bitcode enabled
Step 1: Enable bitcode in build settingStep 2: Add “-fembed-bitcode” flag to - Other C flags - Other C++ flags - Other linker flagsStep 3: Check if framework bitcode enable use oto原创 2017-03-31 12:19:58 · 351 阅读 · 0 评论 -
iOS 模拟器安装APP
1.拷贝本地的DerivedData里面的debug包Mac的拷贝命令有cp和ditto,建议用ditto进行拷贝工作。ditto它在复制过程中不仅能保留源文件或者文件夹的属性与权限,还能保留源文件的资源分支结构和文件夹的源结构。 此命令能确保文件或者文件夹被如实复制。 如果目标文件或者文件夹不存在,ditto将直接复制过去或创建新的文件和文件夹,相反,对于已经存在的文件,命令将与目标文件(夹)原创 2017-07-12 15:23:24 · 2485 阅读 · 0 评论 -
iOS UIButton超出父视图无法点击解决方法
有时候父子View的frame超出了父View的范围。这时候UIButton等子view就无法点击了。以UIButton为例,如果UIButton 是 UIView的子视图,但是UIButton超出了UIView的边界,导致超出的部分无法点击原创 2017-07-20 14:36:07 · 1326 阅读 · 0 评论 -
解读NSString之性能分析
字符串的比较、搜索和排序排序和比较字符串比第一眼看上去要复杂得多。不只是因为字符串可以包含代理对([surrogate pairs )(详见 Ole 写的这篇关于 Unicode 的文章) ,而且比较还与字符串的本地化相关。在某些极端情况下相当棘手。翻译 2017-07-21 17:20:17 · 982 阅读 · 0 评论 -
CAGradientlayer设置视图背景的渐变效果
可以使用CAGradientlayer来设置某些视图背景的渐变效果: //初始化CAGradientlayer对象,使它的大小为需要设置背景色的视图的大小 CAGradientLayer *gradientLayer = [CAGradientLayer layer];原创 2017-09-05 19:12:42 · 978 阅读 · 0 评论 -
WKWebView 与 JS 相互调用
WKWebView 官方文档WKWebView 是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的 UIWebView 和 AppKit 中的 WebView,提供了统一的跨双平台 API。号称拥有 60fps 滚动刷新率、内置手势、高效的 app 和 web 信息交换通道、和 Safari 相同的 JavaScript 引擎。原创 2017-09-13 17:54:12 · 2434 阅读 · 0 评论 -
Dispatch Queue API 详解
Dispatch Queue“开发者要做的只是定义想要执行的任务,并追加到适当的Dispatch Queque中”,用代码表述如下: dispatch_async(queue, ^{ /* * 想要执行的任务Code */ });Dispatch Queue在上述代码 就是执行处理等待的队列,开发者可通过下面的代码创建想要执行的队列。原创 2017-09-14 17:04:02 · 2451 阅读 · 0 评论 -
WKWebView 加载本地JS、htlm文件
WKWebView可以使用下面的方法加载本地文件原创 2017-09-08 11:46:41 · 1149 阅读 · 0 评论 -
NSTimer 计时器
NSTimer官方文档1、初始化+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;+ (NSTimer *)scheduledTimerWithTimeInterval:原创 2017-09-11 17:49:22 · 319 阅读 · 0 评论 -
iOS 添加点击震动效果
Objective-C#import <AudioToolbox/AudioToolbox.h> ... AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);Swiftimport AudioToolbox.AudioServicesAudioServicesPlaySystemSound(kSystemSoundID_Vibrate)原创 2017-09-28 16:13:33 · 6388 阅读 · 0 评论 -
WKWebView 使用HTML 播放本地视频
有时候需要使用WKWebView 来播放视频-(instancetype)init { self = [super init]; if (self) { self.backgroundColor = [UIColor clearColor]; self.opaque = NO; NSURL *baseURL = [NSURL fileUR原创 2017-09-28 21:39:48 · 2955 阅读 · 0 评论 -
WKWebView 遇到的坑
wkwebView 设置Cookies使用WKWebView configoration 设置cookie 有时候可能不成功。 使用如下方法设置cookie会偶现设置不了的问题。NSString *cookie = [NSString stringWithFormat:@"document.cookie = 'session_id=%@'; document.cookie = 'CLIENT=Ap原创 2017-10-13 15:29:32 · 1358 阅读 · 0 评论 -
iOS 常用框架列表
名称最先引入前缀描述Accelerate.framework4.0cblas,vDSP包含加速数学和DSP函数。 请查看 加速框架参考 。AddressBook.framework2.0AB原创 2015-02-05 18:09:53 · 527 阅读 · 0 评论