iOS
文章平均质量分 89
AsiaSun.
日拱一卒
展开
-
iOS原生与H5交互方法
在使用UIWebViewUIWebView已经被苹果弃用,推荐使用WKWebView),可以使用方法来执行JavaScript代码。原创 2024-04-19 11:12:04 · 1587 阅读 · 0 评论 -
关联对象介绍
定义一个中间对象由于不直接支持weak关联,你可以通过创建一个中间对象来持有实际的弱引用。这个中间对象将有一个weak属性,用于指向你想要弱引用的对象。@end@end在分类中使用关联对象在分类中,使用和来分别设置和获取这个中间对象,从而间接实现了一个弱引用的属性。原创 2024-04-03 12:32:26 · 1088 阅读 · 0 评论 -
Delegate介绍
首先定义一个协议,声明需要多个对象响应的方法。@optional@end首先,定义一个事件协议,该协议包含委托者将调用的方法。@end@end@end@end@optional@end这个协议声明了一个方法,任何想要监听事件的代理都应该实现这个方法。原创 2024-04-02 19:04:39 · 1232 阅读 · 0 评论 -
SDWebImage源码解析---疑难问题解答
SDWebImage的简单流程图:网上有大佬做了这个图,供参考:源码看了一遍,写的很好,具体源码分析就不写了,后面会列出一些写的源码不错的文章。原创 2024-04-01 20:40:14 · 884 阅读 · 0 评论 -
Mach-O、Universal Binary、虚拟内存等简介
Mach-O:Mach Object,是Mac\iOS上用于存储程序、库的属于Mach-O格式的文件类型有:11种0x10x20x30x40x50x60x70x80x90xa0xb。原创 2024-03-31 11:19:15 · 834 阅读 · 0 评论 -
NSString有哪些创建对象的方法?创建的对象分别存储在什么区域?
这种情况通常发生在几种特殊对象上,这些对象由于各种原因,被系统视为“永久存活”的,直到应用程序结束。在现在的版本中,为了保证数据安全,苹果对 Tagged Pointer 做了数据混淆,开发者通过打印指针无法判断它是不是一个Tagged Pointer,更无法读取Tagged Pointer的存储数据。所以在分析Tagged Pointer之前,我们需要先关闭Tagged Pointer的数据混淆,以方便我们调试程序。并不表示实际的引用计数值,而是一个标志,表明这个对象是由系统以特殊方式管理的。原创 2024-03-27 20:24:26 · 571 阅读 · 0 评论 -
iOS常见崩溃简介
多指在移动设备(如iOS、Android设备)中或不可移动设备(如:Windows、Linux等设备),在打开或使用应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。多表现为:应用程序画面一闪而过,随即退回到桌面。崩溃会影响用户体验,造成用户流失,因此,我们要重视崩溃根据不同场景,崩溃收集方式不同。原创 2024-03-17 13:18:33 · 2165 阅读 · 0 评论 -
iOS图片占内存大小与什么有关?
图片所占内存大小,与图片的宽高有关我们平时看到的png、jpg、webp这些图片格式,其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。但是当我们加载图片到内存中将要显示出来的时候是不能使用压缩格式,这样就不能显示图片了。计算机依赖每一个像素点中的数据来显示图片。例如iOS中的UIImange的每个像素点是由red+green+blue 三原色在加上alpha透明度组成的。三原色每一个的范围在0 ~ 255所以需要来存储一个值的大小。原创 2024-03-15 19:21:18 · 1260 阅读 · 1 评论 -
iOS卡顿原因与优化
卡顿: 指用户在使用过程中出现了一段时间的阻塞,使得用户在这一段时间内无法进行操作,屏幕上的内容也没有任何的变化。卡顿作为App的重要性能指标,不仅影响着用户体验,更关系到用户留存、DAU等重要产品数据。因此,需要关注APP的卡顿首先,屏幕上看到的所有内容都是计算机绘制出来的图像帧率:Frames Per Second(fps),表示每秒渲染帧数,通常用于衡量画面的流畅度,每秒帧数越多,则表示画面越流畅。通常,60fps比较流畅,也就是60张/秒,每张图片需要的渲染时间大约是:1s/60张 = 1000原创 2024-03-01 10:26:41 · 2011 阅读 · 1 评论 -
关于OC中变量相关知识点
众所周知,变量是用来存储数据的围绕着变量,有很多知识点,总结归纳一下。原创 2024-01-18 17:30:03 · 1139 阅读 · 0 评论 -
iOS黑(灰)白化实现方案---记录
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼🐂,参考资料会附在文章中根据业务不一样,大致产品会有两种需求:需求1:全部设置为黑白色需求2:某个界面设置为黑白色大致的实现方案:方案一:服务端下发所有黑(灰)图片,字体颜色支持动态下发这个,如果是只有某个界面还好,如果是全量替换图片,工作量太大方案二:里面大致涉及到:image、UILabel的color、UIButton的Color、webView、Video等等对于.原创 2022-03-31 14:27:26 · 10261 阅读 · 7 评论 -
《App架构师实践指南》---笔记
大纲第1章 App架构师成长路线架构师是为满足某种架构设计目标而整体上构思把控的角色,在软件行业,又会细分很多,如:系统架构师、企业架构师、应用架构师、业务架构师等本书针对App应用架构师一般需要一下特征:具备客户要求的功能能够在工期内完成性能好可靠安全成本可接收符合法规标准将超越前任极其竞争者也就是:功能、安全、性能、稳定资深工程师,需要在技术的深度和广度两个维度上都有所积累和沉淀第2章 App基础语法系列如果你只会一门编程语言,无论多么精通,仍然显得不够优秀原创 2022-03-30 11:37:17 · 2830 阅读 · 0 评论 -
《Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》---学习笔记(41-52)
41. 多用派发队列,少用同步锁在OC中,如果多个线程要执行同一份代码,那么可能会出现问题。这种情况下,通常使用锁来实现某种同步机制。在GCD出现之前,有两种方法:第一种:synchronization- (void)someMethod{ @synchronized(self){ //Safe }}这种会根据给定的对象(self),自动创建一个锁,并等待块中的代码执行完毕。执行到这段代码结尾处,锁就释放了。然鹅,过多的使用@synchronized(self),会降低代码效原创 2022-03-25 10:24:15 · 3892 阅读 · 0 评论 -
《Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》---学习笔记(31-40)
第五章 内存管理29. 理解引用计数原创 2022-03-22 10:06:17 · 261 阅读 · 0 评论 -
《Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》---学习笔记(21-30)
21. 理解OC错误模型自动引用计数ARC在默认情况下不是“异常安全的”(exception safe)具体来说,结果就是:如果抛出异常,本应该在作用域末尾释放的对象现在却不会自动释放了。OC现在的办法是:只有在极其罕见的情况下抛出异常,抛出异常之后,无须考虑恢复问题,而且应用程序此时也应该推出。而不编写复杂的“异常安全代码”非致命错误,一般是令方法返回nil/0,或者使用NSError。NSErrorNSError对象里封装了三条信息:Error domain(错误范围,其类型为字符串)原创 2022-03-20 12:32:50 · 1630 阅读 · 0 评论 -
《Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》---学习笔记(11-20)
第三章:接口与API设计15. 用前缀避免命名空间冲突OC没有内置的命名空间(namespace)机制。因此,在起名时要避免潜在的命名冲突。文中提到,在引入第三方库的时候,最好将第三方库的所有名字都加上自己的前缀,感觉大可不必,也没见过将所有文件都改名的16. 提供“全能初始化方法”所有对象均要初始化。我们把这种可为对象提供必要信息以便其能完成工作的初始化方法叫做“全能初始化方法”(designated initializer)也就是,带参数的初始化初始化方式可能会不止一种,需要选定原创 2022-03-03 19:59:58 · 1675 阅读 · 0 评论 -
《Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法》---学习笔记(1-10)
前言这本书大致看过一次,但没有做笔记。不做笔记,总觉得没学过。。。那么,再看一遍,做下笔记1. 了解Objective-C语言的起源OC为C语言添加了面向对象特性,是其超集。OC使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。2. 在类的头文件中尽量 少 引入其他头文件在.h文件中,需要引入其他类A时,如果并不需要知道类A的具体细节,只需要知道有一个类名叫A即可,那么,可以使用@class A;,然后在.m文件中,真正用到类A时,再在头部引入:#import "A.h";将原创 2022-02-24 20:09:53 · 1382 阅读 · 0 评论 -
MVVM---再学习
传统的MVC模式在MVC下,所有对象都被归类为模型、视图和控制器。模型保存数据视图向用户呈现交互界面视图控制器调解模型和视图之间的交互。视图通知控制器任何用户交互。视图控制器更新模型以反映状态的变化。模型(通常通过 Key-Value-Observation)通知任何控制器他们需要对其视图执行的更新。Model模型对象通常非常非常简单。通常,它们是Core Data托管对象。根据 Apple 的说法(理想状态),模型包含数据和操作该数据的逻辑。在实践中(现实状态),模型通常非常薄,模原创 2021-12-03 19:40:02 · 1948 阅读 · 0 评论 -
RAC---学习
KVO、代理、通知、Block调用(Block本身不是,Block调用是)都是响应式RAC — 响应函数式万物皆信号????创建信号RACSubject *subject = [[RACSubject alloc] init];订阅信号[subject subscribeNext:^(id _Nullable x) { NSLog(@"%@", x);}];发送信号[subject sendNext:@"哈哈"];RAC使用举例:使用RAC,代替KVORAC用法原创 2021-11-29 14:23:13 · 2355 阅读 · 0 评论 -
《Objective-C高级编程》---笔记---GCD
GCD什么是GCD?Grand Center Dispatch大中心调度GCD是异步执行任务的技术之一。一般,将应用程序中记述的线程管理用的代码在系统级中实现,开发者只需要定义想执行的任务并追加到适当的 Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。现在一个物理的CPU芯片实际上有64个(64核)CPU,如果一个CPU核虚拟为两个CPU核工作,那么一台计算机上使用多个CPU核就是理所当然的事了。1个CPU核一次能够执行的CPU命令始终为1。由于使用多线程的程序可以在某原创 2021-11-06 00:06:18 · 500 阅读 · 0 评论 -
《Objective-C高级编程》---笔记---Block
什么是Block?带有自动变量(局部变量)的匿名函数。在C语言的函数中可能使用的变量:自动变量(局部变量) int a = 10;函数的参数静态变量(静态局部变量) static int a = 10;//局部变量的生命周期延长静态全局变量 static int a = 10;//作用域修改,只在该文件中可以使用,其他文件不能使用全局变量int a = 10;其中,在函数的多次调用之间能够传递值的变量有:静态变量(静态局部变量)静态全局变量全局变量注意区分:作用域、生命周期原创 2021-11-04 20:30:38 · 217 阅读 · 0 评论 -
《Objective-C高级编程》---笔记---ARC
ARCARC(Automatic Reference Counting),自动引用计数器是指内存管理中对引用采取 自动计数的技术。在OC中,采用ARC机制,让编译器来进行内存管理。自己生成的对象,自己所持有非自己生成的对象,自己也能持有不再需要自己持有的对象,释放非自己持有的对象无法释放OC内存管理中的alloc/retain/release/dealloc 方法分别指代:NSObject 类的alloc 类方法、retain 实例方法、release 实例方法和 dealloc 实原创 2021-11-02 23:16:07 · 290 阅读 · 0 评论 -
《高性能iOS应用开发》---笔记
一般,评判一个app的性能好与坏,有以下几个方面:内存、电量消耗、初始化时间、执行速度、响应速度、本地存储、互操作性、网络环境、带宽、数据刷新、多用户支持、单点登录、安全、崩溃核心优化内存管理内存消耗,指的是应用消耗的RAMRAM的使用者不仅包括在前台运行的应用,还包括操作系统服务,甚至还包括其他应用所执行的后台任务。应用中的内存消耗分为两部分:栈大小 和 堆大小栈大小应用中,新创建的每个线程都有专用的栈空间栈决定了:可被递归调用的最大方法数方法调用,使用到了栈视图层级中可原创 2021-09-22 15:05:26 · 218 阅读 · 0 评论 -
iOS之组件化学习(三)---业务组件
前一节我们将基础库做成了组件,接下来,我们来学习下将某个业务做成组件化,这样,某一个业务想添加或者下架,就很方便进入到remoteLib里面建立一个模板库pod lib create YZFMMain创建一个公共业务主组件把主要的非测试代码放入ReplaceMe所在文件夹测试代码文件放在Example里面即可如何解决业务组件引用基础组件?在.spec文件里面加dependencys.dependency 'FMBase/category'在Podfile里面添加source私有源原创 2021-05-26 18:10:51 · 403 阅读 · 0 评论 -
iOS之组件化学习(二)---私有库
私有库对于私有库可以放在本地,也就是本地私有库可以放在网络上,也就是远程私有库当然,我们一般来说都是放在网络上,供同事使用,也就是远程私有库使用的更多一些为了更好的学习远程私有库,我们一步一步来,学习下本地私有库本地私有库新建一个项目,然后在里面随便写一个分类,你会发现,项目中是可以引用该分类的。现在,创建一个私有文件夹,将分类剪切到私有文件夹里面去,你会发现,项目运行不起来了(废话)我们现在要做的就是:如何让项目引用私有文件夹里面的分类,使得项目运行起来首先,项目要使用git管理包原创 2021-05-23 22:00:16 · 571 阅读 · 1 评论 -
iOS之组件化学习(一)---Git、CocoaPods的简单介绍
前言一个项目做大了,项目会很大,大家都去编译同一套代码,编译时间过长;多人开发容易冲突;更要命的是,修改一个地方,会牵扯到很多地方的修改,也就是项目耦合性太高。为了解决这些问题,组件化不失为一种好的办法。组件化概念将一个单一工程的项目,分解为各个独立的组件;然后按照某种方式,任意组织成一个拥有完整业务逻辑的工程一般来说,可以分为基础组件、功能组件、业务组件基础组件包括:基本配置:常量、宏分类网络:AFN、SDWebImage工具:日期时间处理、文件处理、设备信息等功能组件包括:原创 2021-05-21 16:37:46 · 530 阅读 · 1 评论 -
iOSpresent控制后,点击背景消失,点击弹出的位置接收点击事件
有一个场景:点击某个按钮,present一个控制器,该控制器有一个透明背景色,然后上面有一个view展现(为方面叙述,称为bgView),点击控制器的view可以使控制器消失,而点击bgView控制器不消失。这种简单的可以添加两个手势:在控制器的view上添加手势,点击可以使得控制器消失;在bgView上添加手势,点击也触发action,但是里面什么都不做。类似于:UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer all原创 2021-04-30 10:32:58 · 561 阅读 · 0 评论 -
iOS图片资源是放在Images.xcassets还是放在单独的文件夹?
前言在上家公司离职的时候,新伙计来接手我的工作,在给他讲项目的时候,发现我项目中的图片资源都是放在单独的文件夹里面的,然后他就问了我一个问题:为什么你的图片资源不放在Images.xcassets里?问题来了,为什么一定要放在Images.xcassets里面?而不能放在单独的文件夹里面?放在Images.xcassets里面和放在单独的文件夹里面有什么区别?查了资料后,可知:放在Images.xcassets里面的图片:只支持png格式的图片图片只支持[UIImage imageNamed原创 2021-04-21 13:02:39 · 968 阅读 · 0 评论 -
直播学习---基础流程知识点
前言公司要做直播项目,赶紧趁着还没开始前,再去复习、学习一下之前的直播视频本着“不做笔记 = 白学”的格言,写点笔记????问:如何获取别人家的图片资源?首先,在PP助手下载.ipa包,解压后,可以拿到部分图片然鹅,.car里面的图片资源是拿不到的可以借助github上面的工具:cartool即可拿到.car里面的图片资源问:如何scrollView的轮播图可以无限滚动?假如现在只有6个轮播图图片,那么collectionViewCell的个数 乘以 1000这样,就可以无限滚动而原创 2021-04-13 09:48:54 · 661 阅读 · 0 评论 -
setBackgroundImage和setImage
setBackgroundImage和setImage这两个还是有区别的例如:当你需要设置按钮的frame为当前图片的frame时候,如果用setImage,那么frame为nil 这时,只能用setBackgroundImage 才能使得按钮的frame为image的frame UIButton * backBtn = [UIButtonb原创 2015-07-01 10:42:29 · 600 阅读 · 0 评论 -
iOS几个面试题
在B站看了一个大佬的直播iOS面试技巧分享,这个大佬就是写出《招聘一个靠谱的 iOS》的那个大佬。视频主要是介绍他自己的面试流程,很有学习借鉴意义。里面有几道面试题,看着确实都很平常,但是,你自己平时不会这么用,也就不知道能不能这样使用,或者说,这样使用的后果是什么。细想原因,还是对很基础的知识点考察。待会举个例子,大家就明白了。...原创 2020-07-14 14:05:21 · 573 阅读 · 0 评论 -
RunLoop学习
开篇几道面试题:讲讲RunLoop,在项目中有用到吗?runloop内部实现逻辑runloop和线程的关系timer与runloop的关系程序中添加每3秒响应一次的NSTimer,当拖动tableview时timer可能无法响应,为什么?怎样可以解决?runloop是怎样响应用户操作的,具体流程是什么样?说说runloop的几种状态runloop的model作用是什么?RunLoop,顾名思义,就是运行循环,就是在程序运行过程中循环做一些事情。RunLoop的应用范围:定时器(Tim原创 2020-06-04 14:18:39 · 407 阅读 · 0 评论 -
优秀的iOS博客
收集一批优秀的iOS博客,不断更新招聘一个靠谱的 iOS百度大佬出的一些面试题唐巧的博客 做iOS的没几个不知道他的杨萧玉 哈工大毕业,腾讯大佬招聘一个靠谱的 iOS百度大佬出的一些面试题《招聘一个靠谱的iOS》面试题参考答案 有问就有答...原创 2020-05-25 15:18:07 · 563 阅读 · 0 评论 -
Runtime的基本使用
runtime简称运行时。OC是运行时机制,也就是在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数。而对于OC语言中的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。在编译阶段,C语言调用未实现的函数会报错。在编译阶段,OC可以调用任何函数,即使这个函数并未实现,...原创 2020-05-07 18:08:32 · 881 阅读 · 0 评论 -
iOS之Block基本使用
来个大活,今天来写下Block老方法,我们用WWW(what\why\how)进行学习block。block是什么?block其实是一段代码块,其作用是保存一段代码块,在调用的时候block的时候,才调用里面的代码。在程序里面输入inlineBlock,就可以得到block的声明与定义形式:/** 等号前面是block的声明; 等号后面是block的定义; returnType:b...原创 2020-03-10 11:24:55 · 516 阅读 · 0 评论 -
iOS的通知相关知识
我们知道,两个对象的传值有两种:正向传值和反向传值。其中,正向传值可以直接将值赋值过去完成传值动作。而反向传值,一般有三种方法:代理、block和通知,其中,代理和block都是一对一的传值,而涉及到一对多或者是层次结构比较深的情况下,我们一般使用通知。通知是以[NSNotificationCenter defaultCenter]单例形式存在。通知一般需要做三步:监听通知(又被称为注...原创 2020-03-02 00:38:36 · 337 阅读 · 0 评论 -
iOS如何直接分享地图到微信
iOS如何直接分享地图(高德地图)到微信方案一:- (void)shareLocationAction{ if (![WXApi isWXAppInstalled]) { [MBProgressHUD showMessage:@"未安装微信客户端" toView:self.view]; return; } WXLocationObject...原创 2019-11-04 18:21:19 · 1774 阅读 · 1 评论 -
ios collectionView中cell不居中往上偏移问题
做项目,遇到collectionview里面的cell不居中,找了半天,重写也没用,最后的最后,发现原来少写了这个属性,automaticallyAdjustsScrollViewInsets = false妈蛋啊,一下午时间白浪费了原创 2017-03-30 10:54:32 · 2907 阅读 · 0 评论 -
swift项目里面导入三方框架
swift项目里面导入三方框架原创 2017-05-02 14:22:15 · 709 阅读 · 0 评论 -
enum,struck与class
enum,struck与classenum,struck和class的区别和联系?何时使用struck?何时用class?在struck实例方法中如何修改值类型?原创 2017-06-01 15:40:36 · 965 阅读 · 0 评论