自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (3)
  • 收藏
  • 关注

原创 iOS Runtime理解和应用场景

为了关联属性和其对应的存取方法,需要定义一个全局唯一的键值。

2024-03-14 15:08:04 1214 1

原创 一个iOS应用是如何启动以及如何优化

1、主要阶段:分为两个阶段,pre-main阶段和main()阶段。程序启动到main函数执行前是pre-main阶段;在执行main函数后,调用AppDelegate中的-方法完成初始化,并展示首页,这是main()阶段,或者叫做main()之后阶段。二、获取启动流程的时间消耗1、pre-main阶段对于pre-main阶段,Apple提供了一种测量方法,在 Xcode 中 Edit scheme -> Run -> Auguments 将环境变量DYLD_PRINT_STATISTICS 设为1 。之后

2024-03-04 14:57:40 795 1

原创 iOS中需要避免的内存泄漏总结

若项目中使用地图相关类,一定要检测内存情况,因为地图是比较耗费App内存的,因此在根据文档实现某地图相关功能的同时,我们需要注意内存的正确释放,大体需要注意的有需在使用完毕时将地图、代理等滞空为nil,注意地图中标注(大头针)的复用,并且在使用完毕时清空标注数组等。大次数循环内存暴涨问题。.........

2022-07-15 14:33:53 784 1

原创 iOS之isKindOfClass与isMemberOfClass、isSubclassOfClass的总结

先看官方文档:一、isKindOfClass 实例方法- (BOOL)isKindOfClass:(Class)aClassDescription Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)//意思是返回一个B...

2022-05-27 19:33:41 766

原创 iOS实现9Patch图片调整(resizableImageWithCapInsets运用)

代码实现:#pragma mark - iOS 调整9Patch- (UIImage *)auto9PatchWithImage:(UIImage *)fixedImage { UIImage *image = fixedImage; //決定图片拉伸的位置 CGFloat top = 42; CGFloat bottom = 20; CGFloat left = 42; CGFloat right = 20; UIEdgeInse

2022-03-14 17:38:39 1042

原创 OC是一种“动态语言”

动态和静态类型语言介绍:(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby、js就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。动态语言的优缺点:优点:方便阅读,不需要写非常多的类型相关代码;缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等。(2)静态类型语言:静态类型

2022-03-11 12:16:41 248

原创 iOS动画(Core Animation)整理总结

使用优势:Core Animation将大部分实际的绘图任务交给了图形硬件来处理,图形硬件会加速图形渲染的速度。这种自动化的图形加速技术让动画拥有更高的帧率并且显示效果更加平滑,不会加重CPU的负担而影响程序的运行速度。二、Core Animation类图以及常用字段Core Animation类的继承关系图转存失败重新上传取消常用属性duration : 动画的持续时间beginTime : 动画的开始时间repeatCount : 动画的重复次数autoreverses : 执

2022-02-25 16:22:20 745

原创 解决横竖屏切换问题导致UIScrollView、UICollectionView、UITableView偏移

常见情况:场景1:以UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,再次回归设备切换前的方向时,滚动位置发生了变动;场景2:当前控制器为UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,或者进行跳转下一控制器(且下一控制器为改控制器的屏幕方向不同;例如:当前屏幕方向和竖屏,下一控制器方向为横屏)。原因分析:原因1:设备在横竖屏切换时,会导致屏幕宽(width

2022-02-22 10:52:50 3414

原创 iOS之NSKeyedArchiver进行数据归档

普通数组的归档和解档普通数组的归档流程:获得文件归档的路径 使用NSKeyedArchiver类的 NSKeyedArchiver+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path方法将数据归档//普通数组归档- (IBAction)onClickBtn1:(id)sender { //沙盒ducument目录 NSString *docPath = [NSSearchPathForDir

2021-07-09 14:25:09 857 2

原创 iOS之 +(void)load与+(void)initialize理解

1. load1.1 load 方法的调用① 调用时刻:+load方法会在Runtime加载类、分类时调用(不管有没有用到这些类,在程序运行起来的时候都会加载进内存,并调用+load方法); 每个类、分类的+load,在程序运行过程中只调用一次(除非开发者手动调用)。 ② 调用方式:系统自动调用+load方式为直接通过函数地址调用,开发者手动调用+load方式为消息机制objc_msgSend函数调用。 ③ 调用顺序: 先调用类的+load,按照编译先后顺序调用(先编译,先调用),调用子类的+l

2021-06-17 15:35:35 823 1

原创 removeFromSuperview 理解

iOS objectView.removeFromSuperview之后if(self.objectView)仍然成立? // 移除当前自定义视图 for(UIView *myView in [self.view subviews]) { if ([myView isEqual:self.unfinishedView]) { [myView removeFromSuperview]; } }很多人可能碰到和我一样的疑

2021-05-26 15:54:30 841

原创 UITextField限制输入长度,完善中文输入法下的缺陷

1、添加target[self.nickNameTF addTarget:self action:@selector(editChange:) forControlEvents:UIControlEventEditingChanged];2、绑定代理#pragma mark UITextField Delegate//最多输入10个字#define kMaxLength 10- (void)editChange:(UITextField*)textfield { ..

2021-05-18 11:18:39 112

原创 iOS直播之ijkplayer的集成

环境准备集成ijkplayer需要电脑中安装git和yasm,然后好像还需要一个pkg-config(不确定),安装git、yasm和pkg-config可以使用homebrew。检查自己电脑是不是安装了homebrew、git、yasm可以打开终端依次输入:brew -vgit --versionyasm --versionpkg-config --verison 我的已经安装了环境配置成功安装成功可以忽略以下内容直接查看第一章节,如果没有安装成功请继续,首先打开终.

2021-03-09 16:50:15 366 3

原创 iOS的类方法和实例方法使用区别总结

1、区别:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,而且静态内存是有限制的,太多了程序会启动不了。2、使用场景:如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例方法。类方法正好相反,它不需要访问或者修改某个实例的成员变量。类方法一般用于实现一些工具方法,比如对某个.

2021-03-08 11:32:49 701

原创 iOS之runtime将JSON转换成Model

封装initWithNSDictionary:方法该方法接收NSDictionary对象, 返回PersonModel对象.#pragma mark - 使用runtime将JSON转成Model- (void)json2Model { NSString *file = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"json"]; NSData *data = [NSData dataWithContents

2020-11-02 17:25:37 174

原创 iOS之事件传递的具体过程介绍

一.hitTest:withEvent:调用过程iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,称之为hit-test view。window对象会在首先在view hierarchy的顶.

2020-10-27 17:35:42 320

原创 iOS之必会的13种设计模式介绍

<1>适配器模式 何为适配器模式? 适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,做法是将类自己的接口包裹在一个已存在的类中。(联想一下现实生活中的各类适配,就比较容易理解了) 如何使用适配器模式? 以下情况比较适合使用 Adapter 模式: 当你想使用一个已经存在的类,而它的接口不符合你的需求; 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作; 你想使用一些已经存在的子

2020-10-20 11:03:44 538

原创 iOS中UITableView如何优化下载大量的图

tableview是iOS客户端常用控件,对于电商类及新闻展示类的app来说,提高页面流畅度是很有必要的。那么我今天就来提个方案具体思路就是判断内存中是否已经有图片,有就从内存中取,没有就下载,这样可以降低用户流量量费判断当前tableview的滑动状态和滑动动画如果tableview处于滑动状态和有滑动动画状态就不进行下载图片,显示占位图片,当不在处于滑动再下载图片,这样就可以让界面更流畅,也可以避免下载不在视图上和用户不关心的内容。#import"ViewController.h"

2020-10-19 18:40:24 573

原创 iOS之Method Swizzling 简单使用介绍

公司年底要在新年前发一个版本,最近一直很忙,好久没有更新博客了。正好现在新版本开发的差不多了,抽空总结一下。由于最近开发新版本,就避免不了在开发和调试过程中引起崩溃,以及诱发一些之前的bug导致的崩溃。而且项目比较大也很不好排查,正好想起之前研究过的Method Swizzling,考虑是否能用这个苹果的“黑魔法”解决问题,当然用好这个黑魔法并不局限于解决这些问题......需求要在所有页面添加统计功能,也就是用户进入这个页面就统计一次。我们会想到下面的一些方法:手动添加直接简单粗暴的在每

2020-10-14 11:23:49 489

原创 iOS之程序的证书和签名机制

非对称加密和摘要非对称加密的特性和用法非对称加密算法可能是世界上最重要的算法,它是当今电子商务等领域的基石。简而言之,非对称加密就是指加密密钥和解密密钥是不同的,而且加密密钥和解密密钥是成对出现。非对称加密又叫公钥加密,也就是说成对的密钥,其中一个是对外公开的,所有人都可以获得,称为公钥,而与之相对应的称为私钥,只有这对密钥的生成者才能拥有。公私钥具有以下重要特性: 对于一个私钥,有且只有一个与之对应的公钥。生成者负责生成私钥和公钥,并保存私钥,公开公钥 公钥是公开的,但不可能通过公

2020-10-12 21:58:09 623

原创 iOS之Category和Extention的区别

iOS中分类(category)和类扩展(Extension)的区别一、分类的定义:分类是OC中的特有语法,它是表示一个指向分类结构体的指针,它是为了扩展系统类的方法而产生的一种方式。二、分类的创建1、首先创建一个项目,然后新建一个Object-C File文件2、接着到了配置分类信息的界面:因为这里是创建分类,所以选择Categary,Class指的是需要扩展的系统类,file就填写分类的名称。3、最后就可以创建出一个标准的分类文件了。如图三、分类的作用:分类的作用就是在不修改原有类的

2020-10-11 16:07:55 337

原创 iOS开发一些高频使用的第三方库汇总

开发一般APP必备三方库,省力秘籍!!!本篇文章会经常更新最新常用的三方。1.网络请求库 AFNetworkinghttps://github.com/AFNetworking/AFNetworking2.图片缓存器 SDWebImagehttps://github.com/rs/SDWebImage3.下拉刷新上拉加载 MJRefreshhttps://github.com/CoderMJLee/MJRefresh4.JSON与Object互转 JSONModelhttps

2020-10-08 21:27:03 356

原创 iOS之面试高频常问必会的题目整理

Swift1、Swift中struct和class有什么区别?struct是值引用,更轻量,存放于栈区,class是类型引用,存放于堆区。struct无法继承,class可继承。2、Swift中的方法调用有哪些形式?答:直接派发、函数表派发、消息机制派发。派发方式受声明位置,引用类型,特定行为的影响。为什么Swift有这么多派发形式?为了效率。参考文章:深入理解 Swift 派发机制3、Swift和OC有什么区别?Swift和OC的区别有很多,这里简要总结这几条: .

2020-10-04 10:36:18 1615

原创 Python之面试自建链表节点的一些问题总结

1、创建一个链接node1 = Node("c",node3)或者node1 = Node("c",None)node1.next = node32、用循环创建一个链表结构,并且访问其中的每一个节点class Node(object): def __init__(self, data, next=None): self.data = data self.next = nexthead = Nonefor count in range(1,6

2020-09-28 21:14:23 136

原创 iOS 之App启动发生的那些事

(一)App的一些状态一般App一种状态切换另一种状态来响应系统发生的事件有很多不同的状态:Not running:App还没运行 Inactive:App运行在foreground但没有接收事件 Active:App运行在foreground和正在接收事件 Background:运行在background和正在执行代码 Suspended:运行在background但没有执行代码(二)App 在启动和结束等发生状态变化的代理方法delegate 和通知application:

2020-09-28 16:13:58 431

原创 iOS 自动布局框架– Masonry

1.Masory是什么:Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。2.集成方式Masonry支持CocoaPods,可以直接通过podfile文件进行集成,需要在CocoaPods中添加下面代码:pod'Masonry'注意:新手使用在使用Masonry添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃。3、mas_equalTo是一个Macro,mas_equalTo比较

2020-09-25 19:24:52 208

原创 Git仓库的基础命令使用整理

使用GitHub步骤:1.git的安装1.1 安装sudo apt-get install git 1.2 查看git的版本git --version 1.3 查看git的所有操作语句git2.git的全局配置(便于提交代码时,知道是谁提交的代码)2.1 用户名git config --global user.name xxx // xxx为用户名2.2 邮箱git config --global user.email [email protected] //

2020-09-20 20:35:19 97

原创 iOS14适配

适配1: Cell点击无效在14上可能出现点击cell上的视图无法响应的情况.原因:iOS14更改Cell视图布局.将contentView放在最上层,如果将视图加载在cell上,将会出现contentView遮罩,导致事件无法响应.是在此前关于 contentView 的声明注释中,官方已经明确建议开发者将 customView 放在 contentView 上,使 contentView 作为 UITableViewCell 默认的 fatherView。解决办法:1、可以将cell子视图加

2020-09-17 16:40:09 2085

原创 iOS多线程开发总结----面试基础

1 简介1.1 一些概念 系统中正在运行的每一个应用程序都是一个 进程(Process) ,每个进程系统都会分配给它独立的内存运行。也就是说,在iOS系统中中,每一个应用都是一个进程。 一个进程的所有任务都在 线程(Thread) 中进行,因此每个进程至少要有一个线程,也就是主线程。那多线程其实就是一个进程开启多条线程,让所有任务并发执行。 iOS App一旦运行,默认就会开启一条线程。这条线程,通常称作为“主线程”。在iOS应用中主线程的作用一般是: 刷新UI;...

2020-09-17 12:59:39 287

原创 iOS面试准备之ARC工作原理、Autorelease原理

ARCAutomatic Reference Counting,自动引用计数,即ARC,ARC会自动帮你插入retain和release语句。ARC编译器有两部分,分别是前端编译器和优化器。ARC 的工作原理大致是这样:当我们编译源码的时候,编译器会分析源码中每个对象的生命周期,然后基于这些对象的生命周期,来添加相应的引用计数操作retain和release代码。##前段编译器前端编译器会为“拥有的”每一个对象插入相应的release语句。如果对象的所有权修饰符是__strong,那么它就是

2020-09-14 12:38:24 587

原创 Python之switch case用法

不好意思 python没有switch官方解答:Why isn’t there a switch or case statement in Python?言简意赅说:简单的用if/elif/else都可以解决,复杂一点用字典可以完美的漂亮的实现,而且是很好的做法。def function_1(...): pass def function_2(...): pass def function_3(...): pass functions = {'a':

2020-09-13 21:03:37 1321

原创 iOS 富文本简单使用

UITextView *upText = [[UITextView alloc] init]; upText.font = [UIFont systemFontOfSize:14.f]; upText.backgroundColor = [UIColor clearColor]; upText.textColor = [UIColor whiteColor]; upText.textAlignment = NSTextAlignmentLef.

2020-08-27 17:08:08 972

原创 Python之 DFS(深度优先遍历) 和 BFS:(广度优先遍历)

BFS (Breadth First Search) 广度优先的[递归]伪代码如下: 把start节点push入队列; while(队列不为空) { 把队列首节点pop出队列; 对节点进行相关处理或者判断; while(此节点有下一个相关节点){ 把相关节点push入对列; } }def bfs(se...

2020-08-23 20:53:22 325

原创 IOS上传APPStore 被拒问题汇总和解决方法说明

Guideline 2.1 - Information NeededWe have started the review of your app, but we are not able to continue because we need access to a video that demonstrates your app in use on an iOS device working with a child’s device.Next StepsTo help us proceed wit

2020-08-14 20:22:52 2275

原创 面试准备之计算机网络基础和操作系统基础

1、为什么要进行四次挥手?由于TCP是全双工的,因此每个方向都需要单独关闭。因为服务端的listen状态下的socket收到SYN报文的连接请求的时候,可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的SYN报文通知时,仅表示对方没有数据发送给你了,但未必你所有的数据都发送给对方了,所以你未必可能会马上关闭socket,即你可能会发送一些东西给对方后,再发送FIN报文给对方代表你同意关闭连接了,所以这里的ACK和SYN大多情况都是分开发送的。

2020-08-10 09:41:49 812

原创 NSNotificationCenter的理解与注意事项

(1)首先要明白基本的注册和发送原则: NSNotificationCenter是专门供程序中不同类间的消息通信而设置的,使用起来极为方便,长话短说。设置通知,就是说要在什么地方(哪个类)接受通知,一般在初始化中做。 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(recieveA...

2020-08-07 11:08:06 363

原创 快速排序和冒泡排序之Leetcode Python实现

def quick_sort(list1): # 判断长度 if len(list1) < 1: return list1 # 取出第一个元素 num = list1[0] # 遍历第一个元素后面的所有元素,如果比第一个元素小就取出来 start = [x for x in list1[1:] if x <= num] # 遍历第一个元素后面的所有元素,如果比第一个元素大就取出来 end = [x for x in list1[1:] if x > num.

2020-07-31 11:35:38 205

原创 每K个节点一组翻转链表 Leetcode 25 和剑指 Offer 24 反转链表 Python

利用栈结构首先能想到的当然是通过栈的结构,来进行反转,设置一个栈,先进后出的性质。唯一需要注意的当剩余的元素不足以放到栈里面的时候,就停止反转就好来。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def r

2020-07-23 19:51:31 182

原创 Python之深浅拷贝简单介绍

1、传递引用与拷贝在正式学习深浅拷贝之前,我们先要弄清什么是传递引用#定义一个列表a=[1,2,3,4]#把a的值传递给b(把a的值赋给b)b=a#来看看b的值b>>>1,2,3,4'''那么问题来了,b的值与a的值一样,是不是说明a的值被拷贝了然后传给b呢?我们继续往下看:想要回答这个问题,我们需要知道,所谓拷贝就是把a的数值复制后在内存中另开辟一个空间进行存储;那么如果b=a是拷贝a的值的话,那么他们的内存地址应该是不同的,来验证一下: '''id(

2020-07-23 11:20:32 123

原创 Python之可视化工具plotly的简单使用

一、先导入库:pip3 install plotlyimport plotly.graph_objects as go#折线图animals = ['giraffes', 'orangutans', 'monkeys']dada = [0.34,0.55,0.78]fig = go.Figure(data=[ go.Scatter(name='SF Zoo', x=animals, y=data)])fig.show() # #柱状图# # Change the

2020-07-23 09:25:03 786

Leetcode_Swift 算法实现120题.zip

高概率的面试swift版的leetcode编写高

2020-07-27

互联网大厂最新常问iOS面试题汇总.zip

最新iOS面试题汇总

2020-07-15

UITableViewController教程学习

iOS入门开发学习UITableViewController教程,代码+教程。

2018-10-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除