自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 堆和栈的区别

内存管理范围只有OC对象才需要进行内存管理非OC对象类型比如基本数据类型不需要进行内存管理内存管理本质OC的对象在内存中是以堆的方式分配空间的堆内存是由程序员释放的非OC对象一般放在栈里栈内存会被系统自动回收内存分配以及管理方式堆是动态分配和回收内存的 没有静态分配的堆栈有静态分配和动态分配栈的静态分配是系统编译器完成的 比如局部变量的分配动态分配是由alloc函数进行分配的栈的动态分配也是由系统编译器进行的 不需要程序员手动管理堆的释放工作由程序员手动管理 不及时回收

2021-10-04 20:46:56 200

原创 Xcode13编译提示构建系统错误Legacy Build System

提示信息 : The Legacy Build System will be removed in a future release. You can configure the selected build system and this deprecation message in File > Project Settings.解决方法 : File -> Project Settings -> Build System -> New Build System...

2021-09-23 20:50:12 542

原创 计算机网络 - 网络层

文章目录网络层提供的两种服务虚拟电报服务 - 让网络层负责可靠交付数据报服务 - 不让网络层负责可靠交付网际协议IP虚拟互连网络使用一些中间设备进行互连虚拟互连网络的意义从网络层看IP数据报的发送分类的IP地址IP地址及其表示方法常用的三种类别的IP地址IP地址的一些重要特点IP地址和硬件地址地址解析协议ARPARP的作用ARP的要点应当注意的问题IP数据报划分子网和构造超网网际控制报文协议ICMP互联网的路由选择协议IPv6IP多播虚拟专用网VPN和网络地址转换NAT多协议标记交换MPLS网络层提供的两

2021-09-21 15:56:55 250

原创 为什么说OC是动态语言

动态类型运行时再决定对象的类型 简单的说就是id类型 任何对象都可以被id指针所值任何对象都可以被id指针所指 只有在运行的时候才能决定是什么类型但是明确的基本类型都属于是静态类型 int NSString之类静态类型在编译的时候就能被识别出来 所以如果程序发生了类型不对应 编译器就会发出警告而动态类型在编译器编译的时候是不能被识别的 要等到运行时 即程序运行的时候才会根据语境来识别动态绑定基于动态类型在某个实例对象被确定之后 其类型便确定了 该对象对应的属性和相应消息也被完全确定

2021-09-21 15:35:03 206

原创 计算机网络 - 传输层全面解析

文章目录概述传输层的功能传输层的两种协议TCPUDP传输层的寻址与端口端口套接字UDP协议主要特点UDP首部格式UDP检验和的检验过程TCP协议概述只有主机在有的层次为应用层提供通信服务并且可以使用网络层提供的服务传输层的功能传输层提供给进程与进程之间的逻辑通信1. 与网络层的区别是 网络层是为主机与主机之间的通信提供服务 所以一般到网络层的时候 数据传输是还没有完成的2. 从网络层来说 通信的双方是两台主机 IP数据报的头部给出了这两台主机的IP地址3. 但“两台主机之间的通信”实际

2021-09-08 16:18:42 505

原创 计算机网络 - 第一章总结

文章目录分层结构7层OSI参考模型 (法定标准)OSI参考模型解释通信过程应用层表示层会话层传输层网络层数据链路层物理层4层TCP/IP参考模型 (事实标准)OSI和TCP\IP相同点不同点五层参考模型计算机网络体系结构是计算机网络的各层及其协议的集合分层结构实体 : 第n层中的活动元素成为n层实体 同一层的实体叫做对等实体协议 : 为进行网络中的对等实体数据交换而建立的规则、标准或者约定 (只能是对等实体进行协议规定 比如上图3层和4层的实体之间是没有协议的)语法 : 规定传输数据的格式

2021-09-07 10:16:22 148

原创 iOS开发 frame与bounds

文章目录iOS坐标系framebounds只改变size只改变origin总结iOS坐标系frame和bounds都属于CGRect类型的结构体struct CGRect { CGPoint origin; CGSize size;};typedef struct CGRect CGRect;包含一个CGPoint(起点)结构体跟一个CGSize(尺寸)结构体struct CGPoint { CGFloat x; CGFloat y;};typedef

2021-08-19 16:02:19 741

原创 iOS 响应者链

一个例子看懂响应者链概述响应者链的作用就是让 APP 知道用户点击里了哪里 然后应该哪个控件做出反应专业点说 响应者链就是由多个响应者组合起来的链条 就叫做响应者链 它表示了每个响应者之间的联系 并且可以使得一个事件可选择多个对象处理事件的产生和传递...

2021-08-18 16:42:00 277

原创 iOS 关联对象的实现原理

文章目录前言一般使用void objc_setAssociatedObjectobjc_getAssociatedObject关联对象的实现原理前言关联对象的使用一般用于给Category添加成员变量一般使用我们知道 分类添加属性只能生成setter getter方法的声明不能自动生成实现 所以我们需要自己实现两个方法void objc_setAssociatedObject全称 :void objc_setAssociatedObject(id object, const void *ke

2021-08-18 15:21:24 807

原创 UITableView方法执行顺序

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSLog(@"numberOfSectionsInTableView"); return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"numberOfRowsInSection");

2021-08-17 20:10:45 196

原创 iOS Category

文章目录前言前言由几个问题引入Category吧Category的使用场合是什么Category的实现原理Category和Extension的区别是什么Category中有load方法吗? load方法是什么时候调用的? load方法能继承吗?load、initialize方法的区别是什么? 它们在Category中调用的顺序? 以及出现继承时它们之间的调用过程Category能否添加成员变量? 如果可以 如何添加...

2021-08-15 14:45:20 131

原创 iOS RunLoop

文章目录前言什么是RunLoop顾名思义应用范围RunLoop的基本作用RunLoop对象获取RunLoop对象RunLoop与线程RunLoop相关的类CFRunLoopModeRefCFRunLoopModeRef的成员变量Source0Source1TimersObserversCFRunLoopObserverRefRunLoop的运行逻辑以及分析源码流程分析休眠的细节RunLoop在实际开发中的应用控制线程声明周期 (线程保活)解决NSTimer在滑动时停止工作的问题监控应用卡顿性能优化前言这

2021-08-11 15:35:02 231

原创 NSURLSession

文章目录替代可惜优势NSURLSessionTask及其子类发送Get请求过程示例发送Post请求过程示例替代可惜在iOS9.0之后 之前使用的NSURLConnection过期 苹果官方推荐使用NSURLSession替代NSURLConnection优势NSURLSession支持http2.0协议处理下载任务的时候可以直接把数据下载到磁盘中支持后台下载和上传同一个session发送多次请求 只需要建立一次连接提供了全局的session并且可以统一处理 使用更加方便下载的时候是多线

2021-08-08 17:52:52 116

原创 iOS KVO/KVC

文章目录前言KVO的使用KVO本质分析未使用KVO监听的对象使用了KVO监听的对象本质分析验证子类的内部方法有哪些class小总结前言中的关于KVO两个问题的解答iOS用什么方式实现对一个对象的KVO? (KVO的本质是什么)如何手动触发KVOKVO的使用前言这篇博客由两个问题引出iOS用什么方式实现对一个对象的KVO (KVO的本质)如何手动触发KVOKVO的使用@interface Person : NSObject@property (nonatomic, assign) int a

2021-08-02 22:00:29 211

原创 iOS属性关键字原理以及原子性

文章目录前言原子性atomic和nonatomic两种锁--自旋锁和互斥锁自旋锁互斥锁atomic到底有什么作用读写权限内存管理语义引用计数assignunsafe_unretainedweakstrongcopy前言不知道写啥 我看大佬都写前言 随便挂一下听说这个面试必问啊 得好好看好好学先赞后看 已成习惯原子性原子性主要是两个关键字atomicnonatomicatomic和nonatomic翻译就是原子的 是默认的原子操作关键字 atomic也就代表其具有原子性atomic

2021-08-02 08:30:48 445

原创 Block对自动变量的截获以及__block

文章目录block是如何截获自动变量的block的内部结构与没有截获时候的区别该结构体的实例化函数和调用与没有截获时候的区别最终调用block时候与没有截获时候的区别在Block块修改截获的自动变量值利用C语言中的变量__block修饰符Block存储域__block变量存储域block是如何截获自动变量的小demoint main(int argc, const char * argv[]) { int val = 2; void (^blk)(void) = ^{

2021-07-28 16:36:24 239

原创 OC对象的分类

OC对象主要可以分为三种instance对象 实例对象class对象 类对象meta-class对象 元类对象instance对象instance对象就是通过类alloc出来的对象 每次调用alloc都会产生新的instance对象NSObject *obj1 = [[NSObject alloc] init];NSObject *obj2 = [[NSObject alloc] init];obj1 obj2是NSObject的的instance对象它们是不同的两个对象 分别占据

2021-07-22 14:56:32 141

原创 从苹果源码解读retain release的实现

本文使用的runtime版本:779.1retainretain的主要作用是增加引用计数调用过程如下inline id objc_object::retain(){ ASSERT(!isTaggedPointer());//如果是taggedpointer 不涉及引用计数 if (fastpath(!ISA()->hasCustomRR())) { return rootRetain();//fastpath表示if条件中是一个大概率事件//表示如.

2021-07-20 15:15:53 194 1

原创 学习ARC的过程中可能会面临的问题

ARC在编译期跟运行期做了什么编译期根据代码执行的上下文语境,在适当的位置插入 retain,release运行期主要是指 weak 关键字。weak 修饰的变量能够在引用计数为0 时被自动设置成 nil,显然是有运行时逻辑在工作的。为了保证向后兼容性,ARC 在运行时检测到类函数中的 autorelease 后紧跟其后 retain,此时不直接调用对象的 autorelease 方法,而是改为调用 objc_autoreleaseReturnValue。objc_autoreleaseRet

2021-07-19 21:25:45 128 1

原创 iOS动画学习笔记

从易到难分为三个方面CABasicAnimation,UIBezierPath,CAShapeLayer从CABasicAnimation开始这个部分也有三个概念CALayer、CAAnimation、CAAnimationGroupCALayer在最开始学习iOS开发很长的一段时间都只在与view对对碰,只会在很少的角落里看到layer的字眼,所以对于layer的首要问题是,他和view有什么关系来自苹果官方文档Layers provide infrastructure for your v

2021-06-01 18:46:24 209 2

原创 iOS ARC完全指南

什么是自动引用计数自动引用计数(ARC, Automatic Reference Counting)是指内存管理中对引用采用自动计数的技术ARC苹果官方说明在Objective-C采用Automatic Reference Counting (ARC)机制,让编译器来进行内存管理。在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚目标对象,并能立刻释放那些

2021-05-23 20:04:43 661 1

原创 指针和引用

为什么使用指针每一个编程语言都使用指针(C++将指针暴露给程序员 而java等其他语言将指针隐蔽起来)指针能够有效的表示数据结构能动态分配内存,实现内存的自由管理能方便的使用字符串指针直接与数据的存储地址有关值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算。而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高指针和引用的区别本质引用是别名指针是地址具体现象:指针可以在运行时改变所指向的值,而引用一旦与某个对象绑定之后就不能再

2021-05-06 18:00:05 112 1

原创 晚安Blocks

什么是BlocksBlocks是C语言的扩充功能,是带有自动变量(局部变量)的不带有名称的函数关于几种变量的特点c语言函数中可能使用的变量:函数的参数自动变量(局部变量)静态变量(静态局部变量)静态全局变量全局变量由于存储区域特殊,其中有三种变量可以在任何时候以任何状态调用:静态变量(静态局部变量)静态全局变量全局变量其他两种有各自相应的作用域,超出作用域之后会被销毁int buttonId = 0;void buttonCallback(int event) {

2021-04-23 11:34:40 105

原创 《Effective OC2.0》接口与API设计

第15条:用前缀避免命名空间冲突第16条:提供"全能初始化方法"第17条:实现description方法第18条:尽量使用不可变对象第19条:使用清晰而协调的命名方式第20条:理解Objective-C错误模型第21条:理解NSCopying协议

2021-02-07 16:59:15 142

原创 OC中的消息机制

在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段。编译器会将消息发送转换成对objc_msgSend方法的调用。objc_msgSend方法含两个必要参数:receiver、方法名(即:selector),如: [receiver message]; 将被转换为:objc_msgSend(receiver, selector);objc_msgSend方法也能hold住message的参数,如:objc_msgSend(receiver, se

2021-01-31 13:02:15 250 1

原创 UIPickerView的使用

UIPickerView是很常用的一个UI控件首先UIPickerView的创建,与多数控件一样,分配内存并设置位置尺寸。重要的的是代理与数据源,设置代理和数据源后服从代理和数据源协议<UIPickerViewDelegate,UIPickerViewDataSource>其中数据源里面有两个必须实现的方法//设置列数- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return

2021-01-24 17:38:30 301

原创 python学习记录

print() 输出数字 字符串 含有运算符的表达式 print('hello','wolrd') 不进行换行输出为什么转义字符\t有时候是三个空格 有时候是四个空格需要转义字符在字符串中不起作用时 print(r'hello \n wolrd') 在前面加R或r 但最后一个字符不能是\ 可以是\标识符和保留字import keywordprint(keyword.kwlist)变量name='wangXu'print(name)变量的三部分 1标示(内存地址)(内置函数id())2类

2020-12-17 12:40:03 243

原创 LeetCode刷题记录_慢慢更新

github地址写一道题就放上去 慢慢更新。

2020-11-29 16:16:30 106 1

原创 NSNumber有什么用

在OC中已经有许多的基本类型,但是为什么还要有NSNumber呢?原因就是int,long等基本类型不能被存到NSArray和NSMutabeArray中,因为NSArray和NSMutabeArray中只能存储OC的对象,而int,long等基本类型是不能存入的,但要是需求确实需要存入基本类型的数据怎么办呢?这时候用NSNumber转换一下就能存入了。例如想存一个1到NSMutabeArray中:NSMutableArray*testArray = [[NSMutableArrayalloc]ini

2020-11-08 16:35:57 135

原创 iOS开发 可变数组addobjectsFromArray程序崩溃

本周写项目的时候网络请求之后将请求回来的数组加入可变数组中发现程序一直崩溃报错[__NSArrayI addObjectsFromArray:]: unrecognized selector。NSMutableArray拷贝数组时候需要用 .mutableCopy修饰 也就是需要strong来修饰而不是用copy...

2020-11-01 14:27:28 518

原创 Manager封装一个网络请求

Manager的创建为什么使用单例模式意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点主要解决 一个全局使用的类频繁地创建与销毁何时使用 当您想控制实例数目,节省系统资源的时候优点 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例创建Manager类//组长豆瓣app中的代码static DBDManager *manager = nil;@implementation DBDManager+ (instancetype)sharedLeton {

2020-10-14 19:17:00 144

原创 iOS仿写计算器中缀转后缀 表达式求值

github地址iOS计算器准备工作由于OC没有自带的栈文件,只能链表模拟栈typedef struct { char data[50]; int top;}Stack;//符号栈//之前把Double写成了Char改了两天的bug后来还是岳靖翔哥哥改好的//爱岳靖翔哥哥typedef struct { double data[50]; int top;}StackNum;//数字栈需要用到的方法//出栈- (void) pop:(Stack *)s

2020-10-12 20:10:39 156

原创 iOS push pop present

1. push和present都可以推出新的页面,present推出的是模态视图。2. present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换3. present与dismiss对应,push和pop对应。4. present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根视图、其他视图。push方法 NextViewController *next = [[NextViewController alloc] init]; [self

2020-09-28 23:45:07 215

原创 ViewController的生命周期

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序alloc 创建对象,分配空间init (initWithNibName) 初始化对象,初始化数据loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件viewWillAp

2020-09-28 22:18:15 141

原创 Masonry的尝试_照片墙

Masonry的主要应用目前对于我来说 Masonry主要应用于tableView的初始化约束、自定义cell中每一行图片的位置约束照片墙的主要步骤设置导航栏, 初始化UITableView,使用Masonry进行约束并设置代理。设置UITableView的组数行数间距等。在自定义cell中约束每一行图片的相对位置 (每一行三个图片)自定义cell@interface imageTableViewCell : UITableViewCell@property (nonatomic, st

2020-09-11 18:53:27 132

原创 键值监听-KVO

KVO概述键值观察Key-Value-Observer就是观察者模式。利用一个key来找到某个属性并监听其值的改变。KVO建立在 KVC 之上,它能够观察一个对象的 KVC key path 值的变化。KVO提供一种机制,指定一个被观察的对象(A类),当对象某个属性(A类中的属性name)发生更改时,对象会获得通知,并作出相应处理。且不需要给A类添加任何额外代码,我称之为偷窥。特点观察者观察的是属性,只有遵循KVO变更属性值的方式才会执行KVO的回调方法,例如是否执行了setter方法。如果赋值没有

2020-08-13 16:14:03 238

转载 block传值

首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。 第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。其实核心代码就几行代码: 下面是主要代码:(因为我是用storyBoard创建的工程,所以

2020-08-02 11:58:53 129 1

原创 iOS协议传值

属性传值可以做到从当前页将数据传入下一页.而从下一页将值传回上一页则需要用到协议传值.首先我创建了两个视图一个是FirstViewController,另一个是SecondViewController协议六步: 1.创建协议 2.创建代理人属性 3.让对象遵守协议 4.设置代理为对象本身 5.在需要用到的界面写代理方法 6.通过协议将值传给代理//SecondViewController.h 中的代码:#imp

2020-07-28 10:11:45 115

原创 iOS OC语言UITabelView自定义cell

1>纯代码自定义UITableviewCell继承UITableviewCell,重写cell的initWithStyle:withReuseableCellIdentifier- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:

2020-07-20 01:33:51 269

原创 OC static关键字的作用

static关键字可以修饰函数和变量,作用如下:一、隐藏通过static修饰的函数或者变量,在该文件中,所有位于这条语句之后的函数都可以访问,而其他文件中的方法和函数则不行;二、静态变量类方法不可以访问实例变量(函数),通过static修饰的实例变量(函数),可以被类方法访问;三、持久static修饰的变量,能且只能被初始化一次;四、默认初始化static修饰的变量,默认初始化为0;...

2020-06-28 03:02:47 272

空空如也

空空如也

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

TA关注的人

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