自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++核心编程

黑马C++课程笔记

2023-03-13 15:46:11 316

原创 weak置nil的过程

weak置nilweak置nil会发生在调用Delloc的时候,如果没有弱引用标志,没有关联对象,没有析构方法,没有使用SideTable引用计数的话,就直接释放。如果有的话,就对他尽享相应的释放和调用。如果存在弱引用,就会有weak置nil的过程。在这个过程中,以对象的地址为key在全局SideTables中找到相对应的SideTable,在SideTable中,weak_table是一个哈希表,key就是对象的地址,value是一个数组,存储着所有弱引用对象的指针的地址,我们将指针置为nil就是wea

2021-11-02 22:16:35 543

原创 iOS - 分类

背景:Category中虽然可以添加属性,但是不会生成对应的成员变量,也不能生成getter,setter方法。因此,在调用Category中声明的属性时会报错我们可以自己借助关联对象来实现getter和setter方法。关联对象能够帮助我们在运行时阶段将任意的属性关联到一个对象上。具体需要用到以下几个方法:...

2021-10-20 17:15:25 699

原创 iOS - UIKit相关知识点

UIView和Layer的区别首先UIView可以响应事件,Layer不可以.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理。在 UIResponder中定义了处理各种事件和事件传递的接口。UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。CALayer直接继承 NSObject,并没有相应的处理事件的接口。两者最明显的区

2021-08-19 21:36:49 283

原创 iOS - autoreleasePool

文章目录AutoreleasePool引入AutoreleasePoolPage的结构实现AutoreleasePoolPage结构POOL_BOUNDARY(哨兵对象)AutoreleasePool流程objc_autoreleasePoolPush方法autoreleaseFast参数objc_autoreleasePoolPop方法你以为我会说啥,想啥呢,二叉树的三种非递归遍历方式,掌握了吗!!!!每次写些烂怂代码还不好好看看模板AutoreleasePool引入我们看一下objc_autore

2021-08-17 10:11:27 263

原创 iOS - RunLoop简介

文章目录RunLoop简介RunLoop简介RunLoop:顾名思义,运行循环,在程序运行过程中循环做一些事情应用范畴:定时器,GCD,事件响应,手势识别,界面刷新,网络请求,AutoreleasePool如果没有RunLoop,程序执行完之后会直接退出如果有了RunLoop,程序并不会马上退出,而是保持运行状态RunLoop的基本作用:保持程序的持续运行,处理APP中各种事件(触摸事件,定时器事件),节省CPU资源,提高程序性能。伪代码(main函数里RunLoop的循环伪代码)Ru

2021-08-12 17:00:07 308

原创 iOS - NSOperation、NSOperationQueue、pthread、NSThread随记

随便记记????NSOperation、NSOperationQueue 简介NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。既然是基于 GCD 的更高一层的封装。在 NSOperation、NSOperationQueue 中也有类似的任务(操作)和队列(操作队列)的概念。操作(Operati

2021-08-10 19:49:39 120

原创 iOS - GCD多线程

iOS中常见的多线程方案GCD的常用函数同步并发队列( 必须是异步)异步才会显示相互显示出来是并发的如果是同步的即便是并发也显示不出来串行队列异步执行即在子线程串行执行串行队列同步执行,线程改变在主线程dispatch_sync和dispatch_async用来控制是否要开启新的线程队列的类型,决定了任务的执行方式(并行,串行,主队列(也是串行队列的一种))两者之间互相联系却又没有没有直接影响特殊情况:主队列那么多虽然是异步,也是在主线程执行的总

2021-08-10 14:43:50 279

原创 iOS - 通知 代理 KVO Block

文章目录NSNotification 通知delegate代理blockKVO对比KVO和NSNotification的对比delegate和NSNotification对比block和delegate对比观察者模式代理模式NSNotification 通知基本流程:controller使用name发送通知,持有与之相同name的另一方接收通知并进行处理(如果添加的观察者name为空,那么就会接收所有通知)。NSNotification是iOS中一个调度消息通知的类,属于观察者模式的一种,在程序中

2021-08-05 19:59:58 277

原创 iOS - 持久化

文章目录数据持久化沙盒持久化方式属性列表偏好设置归档遵守NSCoding协议CoreData和SQL数据持久化数据持久化就是将数据保存到硬盘中,使得在应用程序或及其重启后可以继续访问之前保存的数据,既可以减少用户流量消耗,也可以增强app的体验效果沙盒沙盒:iOS系统为每个应用程序创建的存储空间,且每个应用程序只能访问自身的存储空间不能互相通信,所有的非代码文件都要保存在此,例如属性文件plist,文本文件,图像,图标,媒体资源等。沙盒目录下的文件及文件夹结构分析:应用程序包(hq):包含

2021-08-05 16:09:10 332

原创 iOS - 单例模式

文章目录介绍单例单例的优缺点单例的优点单例的缺点单例的实现单例的实现方式线程安全的懒汉实现内部静态变量的懒汉实现(静态指针方式,单线程模式单例)加锁的经典懒汉实现(多线程加锁单例)通过@synchronized加锁的多线程单例GCD多线程方式实现单例!!!!(官方推荐)饿汉模式关于复写关于allocWithZone:关于其他参考文章介绍单例单例模式是比较常见的一种设计模式,目的是保证一个类在运行期间有且只有一个实例,而且自行实例化并向整个系统提供这个实例,一直保存在内存中,到程序退出时由系统自动释放这

2021-08-04 19:20:15 247

原创 iOS - KVC

文章目录KVC 简介KVC获取值的过程(valueForKey:的原理)KVC取值的过程(valueForKey:的原理)KVC 简介KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个Key来访问某个属性常见的API有- (void)setValue:(id)value forKeyPath:(nonnull NSString *)keyPath;- (void)setValue:(id)value forKey:(nonnull NSString *)key;-

2021-08-03 15:33:10 153

原创 iOS - KVO底层原理分析

文章目录简单复习一下KVO注册观察者观察者发生变化时会调的方法移除观察者小demoKVO的本质person1的isa指向改变,指向NSKVONotifying_MJPerson类关于NSKVONotifying_MJPerson类注总结KVO全称:Key-Value Observing, 俗称“健值监听”,可以用于监听某个对象属性值的改变简单复习一下KVO注册观察者addObserver:forKeyPath:options:context参数含义:observer:观察者,监听属性变化的对

2021-08-02 22:16:59 193

原创 iOS - Block简单解析

文章目录blocks简介block语法Block类型变量Block的本质Block截获变量对局部变量(auto)的截获blocks简介Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数匿名函数就是不带名称的函数,在C语言中不允许这种函数存在。在C语言中为了调用函数,必须使用该函数的名称,即使使用函数指针来直接调用函数,虽然似乎不用知道函数名也能够使用该函数,但是其实只是似乎,其实还是需要的,所以就是说在C语言中,不能使用匿名函数这种不带名称的函数但是当我们有了Blocks,源代码中就

2021-08-01 18:05:26 279

原创 iOS - 属性关键字

文章目录属性@property/@synthesize/@dynamic语法属性关键字属性关键字之原子类属性关键字之读写权限属性关键字之引用计数深浅复制属性属性:是OC的一项特性,用于封装对象中的数据。iOS中通常用@property的形式来声明属性,一般为我们认为属性 = setter+ getter + 实例变量其实@property是一种语法糖,编译器会自动为你的实例变量生成setter和getter方法。你在获取这个属性值(NSLog(@"%@",self.name);)和设置属性值(se

2021-07-30 22:04:08 235

原创 iOS - 关于ARC的一些补充

文章目录ARC 规则1. 不能使用retain/release/retainCount/autorelease2. 不能使用NSAllocateObject/NSDeallocateObject3. 须遵守内存管理的方法命名规则4. 不要显式调用dealloc5. 使用@autoreleasepool块代替NSAutoreleasePool6. 不能使用区域(NSZone)7. 对象型变量不能作为C语言结构体的成员8. 显式转换id和void*属性ARC实现__strong修饰符__weak修饰符__aut

2021-07-25 15:53:37 165 1

原创 iOS-对象的底层结构和继承者链

文章目录OC本质底层实现转化对象的本质OC对象的分类OC本质底层实现转化OC本质底层实现转化其实都是C/C++代码那么如何转化为C/C++代码打开终端$ cd 文件所在的路径$ xcrun -sdk iphoneos clang -arch a m64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m -o main-arm64.cpp此时就会生成对应的C++文件对象的本质对象类的本质是结构体@interface

2021-07-25 11:14:57 230 4

原创 iOS - 消息传递和消息转发机制

文章目录消息转发机制的前置条件消息转发机制1. 动态方法解析2. 备援接收者3. 完整的消息转发消息转发机制的前置条件首先要理解消息传递的概念在OC中,方法的调用可以理解为对象接收消息,在这一过程中,采用动态绑定机制,即具体调用哪个方法要等到运行时才能确定并执行。那么首先给对象发送消息void returnValue = [someObject messageName:parameter];语句发送消息后,编译器都会将其转化成对应的一条objc_msgSend C语言消息发送void obj

2021-07-18 20:41:26 501 1

原创 iOS - 记录零碎问题

文章目录一. 记录一直出现的'BaiduMapAPI_Base/BMKLocationComponent.h' file not found二. 考勤请假页面的传值问题四. UIPickView的使用五. 链接后台接口所用的第三方库六. MJRefresh框架七. iOS---textfield设置为只有下划线八. 加载view出现的问题九. 注意初始化的问题十. Masonry不会写了,时间太长忘记了,复习一下十一.取消分隔线十二. Git的 M,T, D等标志十三. textField左边栏加图标并留

2021-06-01 23:52:22 421 3

原创 git -多人协作+远程仓库

文章目录一. 前言二. 合并分支(简单流程)一. 前言终于快要简单的介绍完git系列的操作了。在介绍GitHub上进行多人协作开发之前,要先说明一些内容在之前的git分支简介和git详解这两篇文章中,分支合并以及切换等操作只是在本地进行,没有进行远程操作,只是在本地版本库进行提交。在本地版本库即可完成大部分操作。链接远程仓库,即在GitHub网页端建立仓库,并把它同本地仓库链接起来,这样就可以把你的代码推送到远端,与此同时,你的伙伴也可以从远端垃取你的代码,推送他的代码,并且可以合并你们的代码,

2021-05-16 19:30:40 225

原创 git - git stash详细解说

文章目录一. 应用场景二. 有关stash的主要命令1. git stash2. git stash pop3. git clear4. git stash 高级操作三. 使用案例1. 有紧急bug2. 切换分支时切换失败一. 应用场景1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复

2021-05-16 15:24:41 699

原创 git - 分支简介

文章目录一. 理解git中的HEAD和master二. 分支操作创建分支查看分支合并分支快进(fast-forward)合并三方合并删除分支解决冲突版本回退一. 理解git中的HEAD和master在这里解释一下git中HEAD和master的关系。在Git里,主分支即master分支(git默认分支的名字是master)。HEAD严格来说不是指向提交,而是指向分支master,master指向提交的,HEAD指向当前所在分支。一开始,在master分支上,master指向最新的提交,HEAD指向

2021-05-16 00:34:58 917 1

原创 git简介 - 提交流程及注意事项

一. 通用术语通用术语版本库(repository)也叫仓库(也可以看作目录,目录下的所有文件由git管理,git对文件进行追踪)工作目录(working space)持有实际文件,就是你电脑里能看到的目录,比如我的文件夹暂存区(stage或index)它像个缓存区域,临时保存你的更改,HEAD,它指向你最后一次提交的结果。我们创建git版本库时,Git自动为我们创建了唯一一个master分支,所以,...

2021-05-13 11:23:59 472

原创 数据库MySQL基本操作

一. 登陆数据库MySQL启动数据库系统偏好设置启动或关闭:Launchpad——系统偏好设置——MySQL——Start/Stop MySQL Server进入mysql进入或退出mysql// 进入mysql(要求输入mysql登录密码)mysql -u root -p// 退出mysqlexit或者^C二. 数据库基本操作数据库的基本操作数据库的建立 create database XXX;数据库的查看 show databases;数据库的使用 use d

2021-04-27 20:38:31 153

原创 iOS - ARC简单学习

一. 引言1.1 概要ARC,全称叫Automatic Reference Counting。就像自动引用计数,ARC只是自动地帮我们处理“引用计数”的相关部分。在编译单位上,可设置ARC有效或无效,Xcode4.2默认设定为对所有文件ARC有效1.2 学习ARC之前要了解的基础知识引用计数(也就是内存管理)基础每个OC对象都拥有自己的引用计数器,是一个整数,可以理解为对象此时被引用的次数也可以理解为有多少人正在使用此对象,一个对象被创建默认引用计数为1.可能引起的四种变化自己

2021-04-18 14:08:31 504

原创 C语言——两道算法题

一. 有效的括号做题之前判断最重要,首先想一下不符合条件的情况相同类型的左右括号才能互相匹配(反例如事例3)即便左右括号的数量是相等的,也要注意左右括号匹配的顺序(反例如事例4,虽然括号是一样多的,但是匹配的顺序不对,所以不能通过数量来判断)还有一种情况是括号多余了(比如 (([]{}), (((((((() 这种情况,当数目不是偶数就可以排除了,还有一种是([{}]))) 这样就要仔细考虑了)模拟这种问题就想到要用栈了。用栈来保存未匹配的左括号,从左到右依次扫描字符串。当扫描到左括号时,

2021-04-11 05:11:17 133

原创 iOS - WMPageController的使用

一 效果图二 使用方法步骤1. 通过cocoapods引入WMPageController到项目中platform:ios, '7.0'target 'ViewPage ceshi' dopod 'WMPageController'end2.建立文件继承自WMPageController代码#import "WMPageController.h"typedef NS_ENUM(NSUInteger, WMMenuViewPosition) { WMMenuViewPosi

2021-02-21 20:07:54 1752 4

原创 Effective Objective-C 2.0阅读笔记

第六条:理解“属性”这一概念在对象接口的定义中,就可以使用属性,这是一种标准的写法,能够访问封装在对象里的数据属性的优势如果使用了属性的话,那么编译器就会自动编写访问这些属性所需的方法,此过程叫做“自动合成”编译器还会自动向类中添加适当类型的实例变量(可以使用@synthesize语法来指定实例变量的名字)可以使用@dynamic关键字,编译器就不会为上面这个类自动合成存取方法或实例变量。@interface EOCPerson : NSObject@property (nonato

2021-01-30 13:39:32 231 2

原创 java题集(做过的PTA上的题以及期末考试练习题)

7-1 找出最大的对象 (10分)(找出最大的对象)编写一个方法,返回对象数组中最大的对象。方法签名如下: public static Object max(Comparable[] a) public static Object max(Comparable[] a)import java.util.*; public class Main{ public static Object max(Comparable[] a) { /// 请填写此部分内容 } public static void ma

2021-01-23 17:40:18 4135

原创 Java入门学习笔记

类与对象用类制造对象对象(这只猫)(属性+服务 数据:属性或状态, 操作:函数)表达东西或事件运行时响应消息(提供服务)类(猫)定义所有猫的属性就是Java中的类型可以用来定义变量(定义类)创建对象new VendingMachine();VendingMachine v = new VendingMachine();对象变量是对象的管理者. 运算符→(类似点语法,但是这里是让对象执行方法)学习调试方法package vendingmachine;//类:Ven

2020-12-17 21:34:35 232

原创 迪杰斯特拉(Dijkstra)算法求最短路径

一.最短路径从某顶点(源点)出发到另一顶点(目的地)的路径中,有一条各边(或弧)权值之和最小的路径称为最短路径迪杰斯特拉算法:从单原点到其余各店的最短路径二.基本思想依最短路径的长度递增的次序求得各条路径。其中,从源点到顶点v的最短路径是所有最短路径中长度最短者路径长度最短的最短路径的特点:在这条路上,必定只含一条弧,并且这条弧的权值最小(记为v0->v1)下一条路径长度次短的最短路径的特点:或者是直接从源点到该点(只含一条弧)或者是从源点经过顶点v1,再到达该顶点(由两条弧组

2020-12-17 21:28:49 28326

原创 知乎日报问题汇总

知乎问题汇总在ViewController里初始化View,并且调用View里的内容 _homeView = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; [_homeView viewInit]; _homeView.tableView.delegate = self; _homeView.tableVi

2020-11-09 13:12:30 113

原创 买卖股票的最佳时机

一.买卖股票的最佳时机题目:121.买卖股票的最佳时机思考:如果录入的是空数组,则直接返回0运用一层循环,记录最小值,遍历做差代码:int maxProfit(int* prices, int pricesSize){ if(pricesSize == 0) return 0; int i = 0; int min = prices[0]; int max = 0; for(i = 0; i < pricesSize; i++

2020-10-24 16:05:59 113

原创 iOS - 判断对象相等,重写isEqual,hash

一. ==通常我们会用 == 来判断两个对象是否相等,但是这样比较出来的结果可能不是我们期望的,那么 == 究竟比较的是什么对于基本类型==比较的是值对于对象类型,==比较的是对象的地址,即是否为同一个对象 NSString *s1 = @"123"; NSString *s2 = [NSString stringWithFormat:@"%d", 123]; BOOL e1 = s1 == s2; BOOL e2 = [s1 isEqual:s2];

2020-10-21 21:22:03 1074

原创 iOS -Manager封装一个网络请求和JSONModel的使用

一.Manager类的使用1. 创建一个Manager类@implementation Managerstatic Manager *manager = nil;+ (instancetype) sharedManger { if(!manager) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [Manager new]

2020-10-18 22:35:53 230

原创 iOS - present和push

一.定义区别pushViewController 导航栏控制器入栈的方式切换页面(只能逐级返回)presentViewController模式切换的方式切换页面(可以返回任意一层)二. 返回方法push和pop对应用UINavigationController的时候用pushViewController:animated返回之前的视图[[self navigationController] popViewControllerAnimated:YES]; push以后会在navigation的

2020-09-28 23:03:59 740

原创 iOS - ViewController的生命周期

一 生命周期图UIViewController生命周期介绍通过alloc init 分配内存,初始化controller.在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要掉self.view,否则会导致viewcontroller创建view。loadview中这个方法中,要正式加载View.(是一个方法)负责创建UIViewController的view ,如果我们没有重载这个方法。它会调用[super loadView];返回一个View .一般用于创

2020-09-25 21:51:52 130

原创 iOS - MVC架构

文章目录MVC简介MVC模式Control->Model/ViewModel->ControlView->Controller简单登陆的demoModel:ViewControlMVC简介MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC旨在让Model和View不直接通信,而是通过Controller通信,从而达到解耦的目的。简单来说MVC模式能够完成各司其职的任务模式,由于降低了各个环节的

2020-09-20 21:10:23 213

原创 链表基础题(删除问题,反转链表,快慢指针)

1. 题目:力扣237删除链表中的节点思考:从链表里删除一个节点 node 的最常见方法是修改之前节点的 next 指针,使其指向之后的节点。但是这道题我们无法访问我们想要删除的节点(node) 之前的节点.void deleteNode(struct ListNode* node)看它传入的参数是一个节点,所以我们只需要将想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点就可以了。但是要注意,题目中有提示(给定的节点为非末尾节点并且一定是链表中的一个有效节点)所以我们才可以用->

2020-09-17 19:12:40 186

原创 iOS - Masonry

Masonry就是为屏幕适配而生的三方框架.我的理解是Masonry来进行布局可以使视图在不同的模拟机上的位置基本保持相同,使用Masonry要先配置CocoaPods。基本知识点mas_makeConstraints() 添加约束mas_remakeConstraints() 移除之前的约束,重新添加新的约束mas_updateConstraints() 更新约束,写哪条更新哪条,其他约束不变实例演示设置内边距equalTomas_equalTooffset这三种方

2020-09-13 18:57:58 303

空空如也

空空如也

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

TA关注的人

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