自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 【Rust】常见集合

不能这么做的原因是由于 vector 的工作方式:在 vector 的结尾增加新元素时,在没有足够空间将所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中。宏,这个宏会根据我们提供的值来创建一个新的 vector。但是如果我们使用下面的方法,由于get方法返回值是Opton枚举的缘故,会返回None的结果,不会产生报错,而是输出"There is no third element."。在接下来的示例中,为了更加清楚的说明,我们已经标注了这些函数返回的值的类型。

2023-11-30 11:48:56 1177

原创 【Rust】结构体与枚举

注意整个实例必须是可变的;Rust 并不允许只将某个字段标记为可变。另外需要注意同其他任何表达式一样,我们可以在函数体的最后一个表达式中构造一个结构体的新实例,来隐式地返回这个实例。为函数参数起与结构体字段相同的名字是可以理解的,但是不得不重复 email 和 username 字段名称与变量有些啰嗦。如果结构体有更多字段,重复每个名称就更加烦人了。幸运的是,有一个方便的简写语法!

2023-11-28 20:07:58 1302

原创 【Rust】所有权的认识

所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存;在另一些语言中,程序员必须亲自分配和释放内存。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序。Rust 中的每一个值都有一个 所有者(owner)。值在任一时刻有且只有一个所有者。当所有者(变量)离开作用域,这个值将被丢弃。

2023-11-28 15:20:40 1171

原创 【Rust】基本的语法概念

当我们写下这段代码并运行,会发现有如下错误:我们使用关键字来声明rust中的变量,而这类变量默认是不可变的,当我们需要拥有一个可变变量时,就可以通过来实现变量的可变性,如下:运行成功,打印了x变化前后的两个值。我们使用关键字来声明常量,通常常量是用全大写+下划线分隔:常量与不可变变量很相似,不过常量与变量还是有一些区别。当我们定义一个已经存在的变量的 同名变量 时,编译器会以后来的变量为准,而第一个变量就不再会被(编译器)看到,这样的性质叫 隐藏(Shadowing) 。先前的变量相当于被后面的同

2023-11-28 13:41:25 1227

原创 【Rust】从零开始的rust学习嗷

才来实习,由于部门使用的SDK是rust语言,所以先浅浅进行rust学习与记录。

2023-11-23 15:00:31 899

原创 iOS多线程——pthread、NSThread

pthread是一套通用的多线程的API,可以在等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大,我们在 iOS 开发中几乎不使用pthread,但是还是来可以了解一下的POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套 API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows 操作系统也有其移植版。

2023-08-02 15:52:15 194

原创 iOS——锁与死锁问题

多个同优先级的线程重复竞争同一把锁,此时大量虽然被唤醒而得不到锁的线程被迫进行调度切换,这种频繁的调度切换相当影响系统性能)、饥饿、不公平、data races以及其他许多并发带来的罪孽。有趣的是,在共享内存并行软件中真正承担重担的是——锁。在计算机科学中,锁是一种同步机制,用于多线程环境中对资源访问的限制。你可以理解成它用于排除并发的一种策略。上面这段代码并不能保证这个任务有锁,因此它可以在同一时间被多个任务执行。

2023-08-01 19:01:11 3215

原创 【iOS】单例、通知、代理

单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个洁面中初始化调用了这个单例方法取得对象,它们所有的对象都是指向的同一块内存的存储空间(即单例类保证了该类的实例对象是唯一存在的一个)KVO/通知 -------> 观察者模式KVC --------> KVC模式单例模式代理模式1. 代理和通知的区别效率:代理比通知高;delegate是强关联,委托和代理双方互相知道。

2023-07-29 10:49:12 862

原创 KVC与KVO

在调用的时候,会自动生成并注册一个该对象(被观察的对象)对应类的子类,取名,并且将该对象的isa指针指向这个新的中间类。在该子类内部实现4个方法-被观察属性的set方法、class方法、isKVOdelloc。最关键的是set方法中,先调用,再给成员变量赋值,最后调用和需要成对出现才能生效,在中会去调用观察者的方法。重写class方法,这样避免外部感知子类的存在,同时防止在一些使用判断的时候出错。5.isKVO方法作为实现KVO功能的一个标识。delloc里面还原isa指针。

2023-07-28 16:17:53 175

原创 iOS-Block

使用这种方式,同样也可以解决循环引用,但是要注意,block执行完一次,下一次执行之前记得要给blockSelf重新复制,不然会出问题,显然维护这个是非常麻烦的,所以不推荐。如果没有引用局部变量,或者只引用了静态变量和全局变量,则为全局Block,如果内部有使用局部变量,如果有被强指针引用过,就是堆Block,如果没有则为栈Block。这里是对成员变量的类型进行了分类,如果是对象类型的,直接将对象的增加对象的引用计数,如果是。的参数进行传递,同样可以解决循环引用,但是这样做的意义不大,因为。

2023-07-18 19:46:36 855

原创 【iOS】对象的本质探索

Class对象其实是一个指向objc_class结构体的指针。因此我们可以说类对象或元类对象在内存中其实就是objc_class结构体。

2023-07-18 17:03:05 811

原创 【iOS】探索ARC的实现

现在`release`也很好理解了:1. 依旧是判断是否为`taggedPointer`,如果是,直接返回`false`,不需要`dealloc`2. 判断是否有优化 如果没有 就直接操作散列表,使引用计数-13. 判断是引用计数为否为0 如果是0则执行`dealloc`流程4. 若`isa`有优化,则对象的`isa`位存储的引用计数减一,且通过carry判断是否向下溢出了 结果为负数(下图有点问题 应该是判断是有向下溢出),如果是,如果到-1 就放弃`newisa`改为`old`,并将散列表中一半

2023-07-17 15:06:33 1572 1

原创 【iOS】ARC内存管理

weak 修饰的指针变量,在指向的内存地址销毁后,会在 Runtime 的机制下,自动置为 nil。

2023-07-15 14:44:36 525

原创 【iOS】消息传递与消息转发

苹果认为如果一个方法被调用了,那个这个方法有更大的几率被再此调用,既然如此直接维护一个缓存列表,把调用过的方法加载到缓存列表中,再次调用该方法时,先去缓存列表中去查找,如果找不到再去方法列表查询。这样避免了每次调用方法都要去方法列表去查询,大大的提高了速率OC方法调用的本质就是消息发送,消息发送是SEL-IMP的查找过程。

2023-07-14 16:12:30 2204

原创 【iOS】编译与链接

计算机语言分为机器语言、汇编语言和高级语言。可以将高级语言分为两种:编译语言和解释型语言(直译式语言)。

2023-07-14 11:38:25 1033

原创 iOS五大内存分区

我们知道任何一个程序在运行的时候实际是运行在内存中的,这个内存也就是我们通常所说的主存,也叫运行内存,也叫,是可以直接与CPU进行交换数据的内部存储器。内存读取速度很快,所以作为操作系统运行程序的区域。不同的分区保存不同的值,值可以为指针,可以为对象,可以为二进制代码,可以为数字等,每个分区有自己的功能,它们一起协作为系统提供更好的任务划分。

2023-07-12 20:51:46 298

原创 【iOS】消息的三次拯救

Objective-C是一种动态语言,因此其很多行为是在运行时决定的。对于静态语言来说,函数的调用在编译时就已经确定。动态语言则不然,动态语言通过一些巧妙的机制使得函数的真实调用是在运行时决定的,即动态语言的特点是将一些决定性的工作从软件的编译时延迟到了软件的运行时。Objective-C主要是运用消息机制实现运行时特性。

2023-07-12 20:05:48 755

原创 iOS横竖屏切换

当我们从一个竖屏界面push一个横屏界面时,即使横屏界面设置了shouldAutorotate=YES,这个界面也不会变成横屏,但是拿起来设备左右翻转的时候,会发现随着设备旋转,界面也从横屏变成了竖屏。竖屏present横屏是很普遍的场景,比如说视频播放场景的全屏切换,就可以在当前竖屏的界面present一个横屏播放界面的方式,实现横竖屏切换。在每次界面切换的时候,系统都会回调确认新的界面朝向,最终结果为UIWindow朝向、容器vc朝向、界面vc朝向三者的“与”值。1、如果是横屏转竖屏呢?

2023-06-12 20:45:43 1840

原创 【iOS】AFNetworking源码解析--请求实现(二)

上一篇聊了有关NSURLSessionDataTask实例化的相关过程的实现以及为任务添加代理和通知观察,接下来我们看看代理和进度之间的关系以及通知的作用。

2023-05-15 21:51:13 571 1

原创 【iOS】多线程以及GCD和NSOperation

NSOperation在iOS 4后也基于GCD实现,但是相对于GCD来说可控性更强,并且可以加入操作依赖。NSOperation是一个抽象类,因此系统提供了NSBlockOperation和NSInvocationOperation两个子类,并且可以创建继承自NSOperation的自定义类。相比于GCD,NSOperation更加面向对象,开发者除了不需要去了解线程相关的概念之外,甚至连GCD中需要了解的异步/同步、并行/串行都不太需要深入了解,开发者只要懂得任务和队列即可。

2023-05-10 20:15:33 1554

原创 【iOS】AFNetworking源码解析--请求实现(一)

AFNetworking是iOS、macOS、watchOS和tvOS的一个令人愉快的网络库。它建立在基础URL加载系统之上,扩展了构建到Cocoa中的强大的网络高级抽象。它有一个模块化的体系结构,具有设计良好、功能丰富的API,使用起来很愉快。然而,也许最重要的特点是,每天都在使用AFNetworking并为其做出贡献的开发人员组成了一个令人惊叹的社区。AFNetworking为iPhone、iPad和Mac上一些最受欢迎、广受好评的应用提供了动力。

2023-04-30 21:00:32 1041 1

转载 Xcode工程管理

iOS——Xcode工程管理。不用但一定要懂

2023-04-27 20:43:12 97

原创 iOS App的生命周期

App从启动到退出的过程中,iOS应用程序不断从系统接收各种事件,如:用户点击了屏幕、用户点击了Home键,并对这些事件进行响应。接受事件是对象的工作,但是,响应事件就需要由程序员编写的代码来处理。为了理解事件响应需要在哪里处理,就必须对iOS应用程序的整个生命周期和事件周期有所了解。

2023-04-26 19:23:54 652

原创 【iOS】AVPlayer 视频播放

iOS开发中不可避免地会遇到音视频播放方面的需求。常用的音频播放器有 AVAudioPlayer、AVPlayer 等。不同的是,AVAudioPlayer 只支持本地音频的播放,而 AVPlayer 既支持本地音频播放,也支持网络音频播放。常用的视频播放器有 MPMoviePlayerController、AVPlayer 等。

2023-04-25 10:28:42 4917

原创 iOS-关联对象(Objective-C)

本来在这个系列的文章中并不会涉及关联对象这个话题,不过,有人问过我这么一个问题:在分类中到底能否实现属性?其实在回答这个问题之前,首先要知道到底属性是什么?而属性的概念决定了这个问题的答案。如果你把属性理解为通过方法访问的实例变量,我相信这个问题的答案是不能,因为分类不能为类增加额外的实例变量。不过如果属性只是一个存取方法以及存储值的容器的集合,那么分类是可以实现属性的。分类中对属性的实现其实只是实现了一个看起来像属性的接口而已。

2023-04-16 21:43:48 961

原创 iOS-MRC

MRC的意思是手动管理内存(Manual Reference Counting)。

2023-03-31 17:06:31 366 2

原创 【iOS】Blocks

Blocks可简单概括为:带有自动变量(局部变量)的匿名函数在使用Blocks时,可以不声明C++类和Objective-C类,也没有使用静态变量、静态全局变量或全局变量时的问题,仅用编写C语言函数的源代码量即可使用带有自动变量值的匿名函数。对于“带有自动变量值的匿名函数”这一概念并不仅指Blocks。它还存在于许多其他程序语言中。在计算机科学中,此概念也称为闭包(Closure)、lambda计算(λ计算)等。

2023-03-05 20:45:57 463

原创 Effective Objective-C 2.0学习记录(六)

OC语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数器。如果想使某个对象继续存活,那就递增其引用计数;用完了之后,就递减其引用计数。计数变为0,就表示没人关注此对象了,于是就可以把它销毁。NSObject协议声明了下面三个方法用于操作计数器,以递增或递减其值:查看保留计数的方法是retainCount,此方法不太有用,不推荐。下图演示了对象从创建出来经过一次“保留”两次“释放”的过程。对象如果持有指向其他对象的强引用,那么“前者”就拥有“后者”。也就是说,对象想令其所引用的那些对象

2023-02-05 22:05:31 583

原创 Effective Objective-C 2.0学习记录(五)

使用委托模式:获取网络数据的类含有一个“委托对象”,在获取完数据后,它会回调这个委托对象。利用协议机制,很容易就 能以OC代码实现此模式,在图中演示的情况下。委托协议名通常是在相关类名后加上Delegate一词,整个类名用驼峰法来写。有了这个协议后,类就可以用一个属性来存放其委托对象了。这个id类型的协议属性一定要定义成weak,而非strong,因为两者之间必须为“非拥有关系”。一般情况下,扮演delegate的那个对象也要持有本对象,直到用完本对象之后,才会释放。

2023-01-15 00:18:47 566

原创 Effective Objective-C 2.0学习记录(四)

如果编写“initWithCoder:”方法时没有调用超类的同名方法,而是调用了自制的初始化方法,或是超类的其他初始化方法,那么EOCRectangle类的“initWithCoder:”方法就没机会执行,于是,也就无法将_width和_height两个实例变量解码了。不可变对象,我们第一时间想到的肯定是不可变数组那种不可变对象,但是这里的不可变不是这样的,它指的是这个类里边的属性是不能直接被修改的,要实现这种功能,我们就需要用到我们的readonly(只读)修饰符。所有的对象都得初始化。

2023-01-15 00:18:28 545

原创 Effective Objective-C 2.0学习记录(三)

编译器无需查看带有extern关键字的变量的定义,即允许代码使用此常量。此外,预处理过程会把碰到的所有ANIMATION——DURATION都替换成0.3,这样的话,假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都会替换ANIMATION——DURATION。实际上,如果一个变量声明即位const,又为static,那么编译器根本不会创建符号,而是像#define预处理指令一样,把遇到的所有变量替换为常值。请注意 ,用此方式定义的,常量包含类型信息,其好处是清楚的描述了常量的含义。

2023-01-08 21:41:56 572

原创 Effective Objective-C 2.0学习记录(二)

此时,若要编译EOCEmployer,则编译器必须知道EOCPerson这个类,而要编译EOCPerson,又必须知道EOCEmployer这个类,最终会导致“循环引用”。也就是在其实现文件中来引入EOCEmployer这个类,将引入头文件的实际尽量延后,只有在确立需要时才引入,这样可以减少类的使用者所引用的头文件数量,缩短编译时间。所以尽可能用字面量语法来使自己的代码更具有可读性。使用字面量语法创建出来的字符串、数组、字典对象都是不可变的类型,如果需要使用可变版本的对象,请复制一份。

2022-12-21 01:10:10 429

原创 Effective Objective-C 2.0学习记录(一)

在编程中经常需要用到列举collection(NSArray、NSDictionary、NSSet等)中的元素,当前的Objective-C语言有多种办法实现此功能,可以用标准的C语言循环,也可以用OC1.0中的NSEnumerator以及OC2.0中的快速遍历。语言中引入“块”这一特性后,又多出来几种新的遍历方式,而这几种方式往往会容易被开发者忽视。采取这几种新方式遍历collection是,可以传入块,而collection中的每个元素都可能会放在块里被运行一遍,这种做法往往会大幅简化代码过程。

2022-12-18 18:34:54 440

原创 Mac M1配置SSH Key并添加

按上面一步步来就可以

2022-12-15 18:57:54 697

原创 【iOS】UICollectionView初学

UICollectionViewFlowLayout:视图布局对象(流水布局:一行排满,自动排到下行),继承自UICollectionViewLayout。UICollectionViewLayout内有一个collectionView属性,所有的视图布局对象都继承自UICollectionViewLayout。若我们要自定义布局对象,我们一般继承UICollectionViewFlowLayout,然后重写里面的一些方法就可以了。需要实现三个协议;

2022-12-12 21:02:09 110

原创 【iOS】UITableView的动态Cell高度(Masonry)

这样以来将每个评论都计算一次,用数组存储,待到需要时遍历数组取出就好了。estimateRowHeight是预估高度,是还没有加载好评论时的cell高度,当评论的高度已经确定,cell会刷新高度。对于之前写的项目的评论部分,由于评论文字字数的不同会导致label高度不同,所以需要设定不同的cell高度来展示。这样并不是很方便,尤其是有的评论有回复,有的没有回复,这样就需要计算回复的label高度再做判断,更加麻烦。另外对于tableView,下面这个设定行高的方法就不需要了,也不建议去写,很有可能出错。

2022-11-27 19:52:06 3066

原创 【iOS】知乎日报第四周总结

对于评论需要学会自适应cell高度,还要效果一个cell展开改变高的的效果,暂时只写了大致布局。

2022-11-13 22:44:39 414

原创 【iOS】知乎日报第三周总结

上拉tableView直至出现小菊花的加载动画,当请求完成时对cell数量自增,然后tableView reloadData。

2022-11-06 23:03:01 288

原创 【iOS】知乎日报第二周总结

先前使用大的scollView作为底,在这个scrollView上加一个轮播图scrollView,再在轮播图下方加上一个tableview,实际是拖动作为底的scrollView,tableview不能被拖动。重写后:把tableView作为整个的导航栏下方的视图,然后将轮播图放进第一个cell上处理,最后就是对特殊cell(小菊花UIActivityIndicatorView )和cell上方头标题设置。另外还有网络请求获取更早日期的文章信息 也就是上拉获取信息,(目前有bug还没有完全实现)

2022-10-30 19:51:20 111

原创 【iOS】知乎日报第一周总结

第一周因为自身原因原因浪费了几天时间,没有达到要求进度,下周尽量多写追上进度。

2022-10-23 22:15:26 335

空空如也

空空如也

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

TA关注的人

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