OC
OC的相关知识点
~废弃回忆 �༄
这个作者很懒,什么都没留下…
展开
-
SDWebImage中SDWebImageOptions类型
SDWebImage中SDWebImageOptions类型原创 2023-10-10 15:57:49 · 694 阅读 · 0 评论 -
OC(iOS)中常见的面试题汇整(大全)
iOS/OC常见的面试题原创 2023-06-12 15:19:20 · 7121 阅读 · 0 评论 -
AES(对称加密)和RSA(非对称加密)使用详情
AES和RSA的混合使用,以及OC中常用的加密方式.参数加密原创 2023-06-07 18:29:41 · 6869 阅读 · 0 评论 -
实例对象,类对象和元类之间的关系(类底层探索)
实例对象,类对象和元类之间的关系(类底层探索)原创 2022-09-04 11:33:55 · 196 阅读 · 0 评论 -
OC和Swift如何混合使用
OC和Swift如何混合使用原创 2022-08-14 10:39:51 · 544 阅读 · 0 评论 -
isa指针使用详情
isa指针使用详情原创 2022-07-26 09:20:06 · 392 阅读 · 0 评论 -
OC中new和init的区别
OC中new和init的区别原创 2022-07-26 09:15:15 · 274 阅读 · 0 评论 -
OC中成员变量,实例变量和属性之间的区别和联系
OC中成员变量,实例变量和属性之间的区别和联系原创 2022-07-25 17:29:41 · 639 阅读 · 0 评论 -
使用self和_(下划线)的区别
self和_调用属性的区别原创 2022-07-25 16:45:55 · 433 阅读 · 0 评论 -
获取APP(ipa)包中的图片资源
在电脑上面连接数据线,使用<PP助手>软件中下载对应的应用程序; 在"下载管理"中找到对应下载的ipa包; 对ipa包使用右键,选择"归档实用工具"打开; 找到以.app结尾的包,单击右键,选择"显示包内容";获取Assets中的图片在git上面下载"cartool"工具并运行; 选择项目中的"Edit Scheme..."; 左侧选中Run栏位,上面选中"Argument"; 在第一个栏位上面增加需要解包的(Assets.car)路径和需要解压到的路径; 运行程序..原创 2022-04-26 19:13:51 · 892 阅读 · 0 评论 -
KVO的本质是什么?
KVO的本质是什么?1.利用runtime API动态生成一个子类,并且让实例对象的isa指向这个全新的子类;(例如当前类是MJPerson,那么runtime生成的子类就是NSKVONotifing_MJPerson,而该子类又是MJPerson的子类.并且在MJPerson类基础上额外还会生成class方法,dealloc方法,_isKVOA方法)2.当修改实例对象的属性时会调用Foundation的_NSSetxxxValueAndNotify函数,改函数实现的原理是: 2.1.先...原创 2022-03-25 21:50:39 · 252 阅读 · 0 评论 -
APP安装包瘦身
安装包(IPA)主要由可执行文件,资源组成资源(图片,音频,视频等)采取无损压缩 去除没有用到的资源:https:github.com/tinymind/LSUnusedResources可执行文件瘦身编译器优化(Strip Linked Product;Make Strings Read-Only;Symbols Hidden by Default设置为YES;去除异常支持:Enable C++ Exceptions,Enable Objective-C Exceptions设置为NO,O原创 2022-03-24 23:11:28 · 201 阅读 · 0 评论 -
APP性能优化--启动优化
1.APP启动方式1.冷启动:从零开始启动APP;2.热启动:APP已经在内存中,在后台存活着,再次单击图标启动APP.2.APP启动时间的优化,主要是针对冷启动进行优化3.Arguments通过添加环境变量可以打印出APP的启动时间分析(Edit scheme-->Run-->Arguments)DYLD_PRINT_STATICS设置为1 如果需要更详细的信息,那就将DYLD_PRINT_STATICS_DETAILS设置为14.APP启动的阶段4.1.dyl原创 2022-03-24 22:46:19 · 1977 阅读 · 0 评论 -
APP性能优化--耗电优化
耗电的主要来源CPU处理; 网络,Networking; 定位,Location; 图像,Graphics.耗电优化的方向:1.尽可能降低CPU,GPU功耗;2.少用定时器;3.优化I/O(文件的读写)操作;尽量不要频繁写入小数据,最好批量性一次性写入; 读写大量重要数据的时候,考虑使用dispatch_io,其提供了GCD的异步操作文件I/O的API.用dispatch_io系统会优化磁盘访问; 数据量比较大的,建议使用数据库(比如SQLite,CoreData).4..原创 2022-03-24 20:53:23 · 588 阅读 · 0 评论 -
RunLoop使用详情(视频讲解)
1.讲讲RunLoop,项目中有用到吗?RunLoop顾名思义就是程序在运行过程中循环做一些事情.如果没有RunLoop的话,程序运行结束以后就会马上退出的.而我们OC的main函数系统自动为我们创建了RunLoop函数,所以程序并不会马上退出,而是保持运行状态,监听用户的相关操作.RunLoop的基本作用:保持程序的持续运行; 处理App中的各种事件(比如触摸事件,定时器事件等) 节约CPU资源,提高程序性能.该做事的时候做事,该休息的时候休息.RunLoop 的应用范畴:定时器,原创 2022-03-21 18:09:32 · 3181 阅读 · 1 评论 -
React Native和Flutter语言如何选择
为了一份代码能够运行在多个平台,从而节省开发和沟通成本,各公司都开始关注和使用跨端方案。目前,主流的跨端方案,主要分为两种:一种是,将 JavaScriptCore 引擎当作虚拟机的方案,代表框架是 React Native;另一种是,使用非 JavaScriptCore 虚拟机的方案,代表框架是 Flutter。使用跨端方案进行开发,必然会替代原有平台的开发技术,所以我们在选择跨端方案时,不能只依赖于某几项指标,比如编程语言、性能、技术架构等,来判断是否适合自己团队和产品,更多的还要考虑开发效率、社区原创 2022-03-17 18:19:53 · 2241 阅读 · 0 评论 -
iOS 中内存的管理?
不同的系统版本对 App 运行时占用内存的限制不同,系统版本的升级也会增加占用的内存,同时 App 功能的增多也会要求越来越多的内存。然而,移动设备的内存资源是有限的,当 App 运行时占用的内存大小超过了限制后,就会被强杀掉,从而导致用户体验被降低。所以,为了提升 App 质量,开发者要非常重视应用的内存管理问题。移动端的内存管理技术,主要有 GC(Garbage Collection,垃圾回收)的标记清除算法和苹果公司使用的引用计数方法。相比较于 GC 标记清除算法,引用计数法可以及时地回收原创 2022-03-17 18:09:12 · 1565 阅读 · 0 评论 -
如何构造酷炫的物理效果和过场动画效果?
LottieLottie 框架就很好地解决了动画制作与开发隔离,以及多平台统一的问题。Lottie 是 Airbnb 开源的一个动画框架。Lottie 这个名字来自于一名德国导演洛特·赖尼格尔(Lotte Reiniger),她最著名的电影叫作“阿赫迈德王子历险记(The Adventures of Prince Achmed)”。这个框架和其他的动画框架不太一样,动画的编写和维护将由动画设计师完成,完全无需开发者操心。动画设计师做好动画以后,可以使用After Effects将动画导出成 JS原创 2022-03-17 15:51:23 · 1846 阅读 · 0 评论 -
RunLoops使用详情
视频地址:https://v.youku.com/v_show/id_XODgxODkzODI0.html1.什么是RunLoop从字面意思上是一直循环跑,事实上就是一个循环的概念。一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出.这个时候就需要使用到RunLoop了.2.RunLoop基本的循环模式1.开始循环 ;2.程序处于睡眠状态,等待接受事件 ;3.事件传入,程序被唤醒,获取事件 ;4.处理事件;5.原创 2022-03-17 15:09:03 · 1075 阅读 · 0 评论 -
如何减少APP电量消耗?
手机设备电量有限,App 开发时如不注意电量的的消耗,当用户发现你的 App 是耗电大户时,就会毫不犹豫地将其抛弃。所以,每次开发完,我们都需要去检查自己的 App 有没有耗电的问题。耗电的原因有千万种,如果每次遇到耗电过多的问题,我们都从头查找一番的话,那必然会效率低下。就比如说,测试同学过来跟你说“某个页面的前一个版本还好好的,这个版本的耗电怎么多了那么多”,那么你首先想到可能就是这个页面有没有开启定位,网络请求是不是频繁,亦或是定时任务时间是不是间隔过小。接下来,你会去查找耗电问题到底是怎么引原创 2022-03-17 10:24:56 · 2316 阅读 · 0 评论 -
多线程的哪些坑
我们可以先来试想这么一个场景,如果没有多线程技术,那么我们要对一张照片进行滤镜处理时,就只能由主线程来完成这个处理。可想而知,这时候主线程阻塞了,其他的任何操作都无法继续。解决这个问题的方法,就是再多创建一个线程来进行滤镜处理的操作,这样主线程就可以继续执行其他操作。这,也就是我们今天要说的多线程技术了。目前,在 iOS 开发中,我们经常会用到系统提供的方法来使用多线程技术开发 App,期望可以充分利用硬件资源来提高 App 的运行效率。但是,我们不禁会想到,像 UIKit 这样的前端框架并没有原创 2022-03-16 18:51:22 · 581 阅读 · 0 评论 -
如何建监控线上APP的质量性能,CPU使用率,FPS,内存
通常情况下,App 的性能问题虽然不会导致 App 不可用,但依然会影响到用户体验。如果这个性能问题不断累积,达到临界点以后,问题就会爆发出来。这时,影响到的就不仅仅是用户了,还有负责 App 开发的你。为了能够主动、高效地发现性能问题,避免 App 质量进入无人监管的失控状态,我们就需要对 App 的性能进行监控。目前,对 App 的性能监控,主要是从线下和线上两个维度展开。今天这篇文章,我就从这两个方面来和你聊聊如何做性能监控这个话题。接下来,我们就先看看苹果官方的线下性能监控王牌 Instru原创 2022-03-16 18:34:02 · 1422 阅读 · 0 评论 -
如何利用 RunLoop 原理去监控卡顿?
卡顿问题,就是在主线程上无法响应用户交互的问题。如果一个 App 时不时地就给你卡一下,有时还长时间无响应,这时你还愿意继续用它吗?所以说,卡顿问题对 App 的伤害是巨大的,也是我们必须要重点解决的一个问题。现在,我们先来看一下导致卡顿问题的几种原因:复杂 UI 、图文混排的绘制量过大; 在主线程上做网络同步请求; 在主线程做大量的 IO 操作; 运算量过大,CPU 持续高占用; 死锁和主子线程抢锁。那么,我们如何监控到什么时候会出现卡顿呢?是要监视 FPS 吗?RunLoop 原理原创 2022-03-16 17:00:04 · 1058 阅读 · 0 评论 -
监控线上奔溃异常
App 上线后,我们最怕出现的情况就是应用崩溃了。但是,我们线下测试好好的 App,为什么上线后就发生崩溃了呢?这些崩溃日志信息是怎么采集的?能够采集的全吗?采集后又要怎么分析、解决呢?接下来,通过今天这篇文章,你就可以了解到造成崩溃的情况有哪些,以及这些崩溃的日志都是如何捕获收集到的。App 上线后,是很脆弱的,导致其崩溃的问题,不仅包括编写代码时的各种小马虎,还包括那些被系统强杀的疑难杂症。下面,我们就先看看几个常见的编写代码时的小马虎,是如何让应用崩溃的。数组越界:在取数据索引时越界,原创 2022-03-16 16:27:55 · 864 阅读 · 0 评论 -
无侵入式埋点
在 iOS 开发中,埋点可以解决两大类问题: 一是了解用户使用 App 的行为, 二是降低分析线上问题的难度。 目前,iOS 开发中常见的埋点方式,主要包括代码埋点、可视化埋点和无埋点这三种。在这其中,可视化埋点和无埋点,都属于是无侵入的埋点方案,因为它们都不需要在工程代码中写入埋点代码。所以,采用这样的无侵入埋点方案,既可以做到埋点被统一维护,又可以实现和工程代码的解耦。接下来,我们就通过今天这篇文章,一起来分析一下无侵入埋点方案的实现问题吧。 代码埋点主要-...原创 2022-03-16 15:56:42 · 685 阅读 · 0 评论 -
Infer静态分析-内存泄漏分析
随着业务开发迭代速度越来越快,完全依赖人工保证工程质量也变得越来越不牢靠。所以,静态分析,这种可以帮助我们在编写代码的阶段就能及时发现代码错误,从而在根儿上保证工程质量的技术,就成为了 iOS 开发者最常用到的一种代码调试技术。Xcode 自带的静态分析工具 Analyze,通过静态语法分析能够找出在代码层面就能发现的内存泄露问题,还可以通过上下文分析出是否存在变量无用等问题。但是,Analyze 的功能还是有限,还是无法帮助我们在编写代码的阶段发现更多的问题。所以,这才诞生出了功能更全、定制化高、效率原创 2022-03-16 10:50:12 · 997 阅读 · 0 评论 -
APP代码如何瘦身
如何从资源和代码层面实现全方位瘦身?官方 App ThinningApp Thinning 是由苹果公司推出的一项可以改善 App 下载进程的新技术,主要是为了解决用户下载 App 耗费过高流量的问题,同时还可以节省用户 iOS 设备的存储空间。现在的 iOS 设备屏幕尺寸、分辨率越来越多样化,这样也就需要更多资源来匹配不同的尺寸和分辨率。 同时,App 也会有 32 位、64 位不同芯片架构的优化版本。如果这些都在一个包里,那么用户下载包的大小势必就会变大。App Thinning..原创 2022-03-16 10:12:53 · 1169 阅读 · 0 评论 -
App 如何快速重启(编译)
iOS 原生代码的编译调试,都是通过一遍又一遍地编译重启 App 来进行的。所以,项目代码量越大,编译时间就越长。虽然我们可以通过将部分代码先编译成二进制集成到工程里,来避免每次都全量编译来加快编译速度,但即使这样,每次编译都还是需要重启 App,需要再走一遍调试流程。对于开发者来说,提高编译调试的速度就是提高生产效率。试想一下,如果上线前一天突然发现了一个严重的 bug,每次编译调试都要耗费几十分钟,结果这一天的黄金时间,一晃就过去了。到最后,可能就是上线时间被延误。这个责任可不轻啊。那么问题来了原创 2022-03-16 00:23:56 · 1188 阅读 · 0 评论 -
APP启动速度的优化与监控
App 启动时都干了些什么事儿?一般情况下,App 的启动分为冷启动和热启动。相应地,这个阶段对于启动速度优化来说,可以做的事情包括:冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。 热启动是指 ,App 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程,这个过程做的事情非常少 所以,今天这篇文章,我们就只展开讲 App 冷启动的优化。 用户能感知到的启原创 2022-03-16 00:00:30 · 232 阅读 · 0 评论 -
常用的第三方集成
iOS中常用的第三方集成原创 2022-03-11 12:01:17 · 239 阅读 · 0 评论 -
OC中常用的英文发音和注解
OC中常用的英文atomic [əˈtɑːmɪk]原子性,就是防止在未完成的时候被另外一个线程读取,造成数据错误BCDDocuments ['dɑkjumənts]存储用户相关的数据,用来存放不会被清理的数据.(用户拍摄的视频,用户创作的图片,用户唱的歌曲,用户收藏的商品),可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录。EFGHIJKLLibrary/Caches目录 [ˈkæʃɪz]存放缓存文件,iTunes不会备份此目录,.原创 2021-09-27 17:35:03 · 574 阅读 · 0 评论 -
两种颜色渐变
颜色渐变/** * @brief 渐变颜色 * * @param c1 开始颜色 * @param c2 结束颜色 * @param height 渐变高度 * * @return 渐变颜色 */+ (UIColor*)df_jianBianFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withHeight:(int)height{ CGSize size = CGSizeMake(1, height);原创 2021-06-03 16:16:57 · 324 阅读 · 2 评论 -
选中所有的文字
/** 选中指定范围的文字*/@implementation UITextField (****)- (void)setSelectedRange:(NSRange)range{ UITextPosition *beginning = self.beginningOfDocument; UITextPosition *startPosition = [self positionFromPosition:beginning offset:range.location]; UI原创 2021-06-03 16:15:53 · 188 阅读 · 0 评论 -
获取当前选中字符串的范围
/** 当前选中的字符串范围*/- (NSRange)selectedRange{ UITextPosition* beginning = self.beginningOfDocument; UITextRange* selectedRange = self.selectedTextRange; UITextPosition* selectionStart = selectedRange.start; UITextPosition* selectionEnd =原创 2021-06-02 15:30:31 · 204 阅读 · 0 评论 -
根据角度进行旋转
/** 旋转角度(x、y、z)*/- (void)transform3DMakeRotationX:(CGFloat)angleX Y:(CGFloat)angleY Z:(CGFloat)angleZ{ CATransform3D transform3D = CATransform3DIdentity; if (angleX != 0) { transform3D = CATransform3DConcat(transform3D, CATransform3D原创 2021-06-02 15:30:12 · 266 阅读 · 0 评论 -
3D旋转动画
- (void)3dBackgroundAnimation:(BOOL)show duration:(CGFloat)duration{ if (show) { CGFloat x = self.center.x; CGFloat y = self.frame.origin.y; self.layer.anchorPoint = CGPointMake(0.5, 0); self.layer.position = CGPointMak原创 2021-06-02 15:29:53 · 284 阅读 · 0 评论 -
获取某一点的颜色
/** 获取某一点的颜色*/- (UIColor *)colorWithPoint:(CGPoint)point{ unsigned char pixel[4] = {0}; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGI原创 2021-06-02 15:29:31 · 283 阅读 · 0 评论 -
根据高度计算文字大小
/** * @brief 计算文字的大小 * * @param font 字体(默认为系统字体) * @param height 约束高度 */- (CGSize)df_sizeWithFont:(UIFont *)font constrainedToHeight:(CGFloat)height{ UIFont *textFont = font ? font : [UIFont systemFontOfSize:[UIFont systemFontSize]];原创 2021-06-02 15:29:11 · 386 阅读 · 0 评论 -
根据宽度计算文字大小
根据宽度计算文字大小/** * @brief 计算文字的大小 * * @param font 字体(默认为系统字体) * @param width 约束宽度 */- (CGSize)df_sizeWithFont:(UIFont *)font constrainedToWidth:(CGFloat)width{ UIFont *textFont = font ? font : [UIFont systemFontOfSize:[UIFont systemFontSize]];原创 2021-06-02 15:28:52 · 572 阅读 · 0 评论 -
字体自适应
字体自适应@implementation UILabel (WDFAdd)- (void)adjustLabelToMaximumSize:(CGSize)maxSize minimumSize:(CGSize)minSize minimumFontSize:(int)minFontSize{ //// 1) Calculate new label size //// --------------------------- // First, reset some basic param原创 2021-06-02 15:28:32 · 206 阅读 · 0 评论