自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 iOS ------ 多线程基础

简单就是把一个处理器划分为若干个段的时间片,每个进程会被操作系统分配一个时间片(即每次被CPU选中来执行当前进程所用的时间),每个时间片依次轮流地执行处理各个应用程序,时间一到,无论进程是否运行结束,操作系统就会强制将CPU这个资源转到另一个进程去执行,由于每个时间片很短,对于每个程序,就好像为自己单独服务,从而达到多个程序同时进行的效果。我们一般使用比较多的是 GCD,因为开发者只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码,但这也是 GCD 的不够灵活的地方,我们。

2024-05-15 21:32:56 1126

原创 iOS ------ MRC

这里只是发送release消息,如果当时的引用计数依旧不为0,则对象依然不会被释放,autorelease方法返回对象本身,且调用完autorelease方法后,对象的计数器不变。如果将新值直接赋给实例变量,而没有堆旧值进行适当的释放操作,旧值的引用计数就从不会减少,对象的内存也不会释放,这就会导致内存泄漏。当一个对象被复制给一个实例变量,为了确保对象在使用时保持有效,需要增加对象的引用计,这样可以保证在其他地方意外释放对象。时,开发者只需要关注对象的强引用和弱引用,无需关心对象的引用计数。

2024-05-12 20:38:28 845

原创 iOS ------ 内存五大分区

在方法内部,可以使用_cmd来获取当前方法的选择器,从而进行一些运行时的操作,比如动态调用其他方法。虚拟内存将应用程序的内存地址空间分割成固定大小的页面(Page),并将这些页面映射到物理内存或者存储设备上的磁盘空间。其中,全局变量是指变量值可以在运行时被动态修改,而静态变量是static修饰的变量,包含静态局部变量和静态全局变量。在iOS中,内存被分为五大区域:栈区,堆区,全局/静态区,常量区,代码区。一般情况下应用程序是不需要考虑堆和栈的大小的,但是事实上堆和栈都不是无上限的,self和_cmd。

2024-05-08 22:22:41 691

原创 iOS ------ JSONModel源码

除了一些框架自己处理的错误(比如传入的对象不是字典),框架的作者也允许我们自己定义属于我们自己的错误。比如,当age对应的数值小于25的时候,打印出Too young!,并阻止模型的转换if (!return NO;return NO;return YES;如果要被转化的数据age小于25,就会打印错误,并且模型也不会转化。简化的数据映射:JSONModel提供了简单而直观的方式来将JSON数据映射到Objective-C对象的属性上。

2024-05-06 19:45:01 1223

原创 iOS ------ Method Swizzling (动态方法交换)

Method(方法)对应的是objc_method结构体;而objc_method结构体中包含了SEL method_name(方法名),IMP method_imp(方法实现)// objc_method 结构体// 方法名// 方法类型// 方法实现Method(方法),SEL(方法名),IMP(方法实现)三者的关系:在运行中,class(类)维护了一个method list(方法列表)来确定消息的正确发送。

2024-04-29 20:34:59 1195

原创 iOS ------代理 分类 拓展

OC是动态的,我们可以手动添加。一种常见的方法就是通过runtime.h 中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成对象。在其他地方使用注意,以上代码只是手动实现了setter/getter方法,但调用_成员变量依然会报错。关联对象并不存储在被关联对象本身的内存中,而是有一个全局统一的AssociationManager中。

2024-04-23 21:39:34 1212 3

原创 iOS ------ Block的总结

通过上面的block的额用法发现,block每次回调是通过它的匿名函数进行的,也就是每次最多执行一个回调,在需要进行大批量的回调的时候,就需要写很多不同的block回调,这样就不合适这时使用协议和代理的方式就自然多了。除此之外,block还比较适合线程之间的切换回调,GCD就是采用了多线程结合block来做的。

2024-04-18 20:36:40 1267

原创 iOS------SDWebImage源码

一个异步图片下载及缓存的库一个扩展UIImageView分类的库,支持加载网络图片并缓存图片异步图片下载器异步图片缓存和自动图片有效期限管理支持GIF动态图片支持WebP背景图片减压保证同一个URL不会再次下载保证无效的URL不会重新加载保证主线程不会死锁性能优越使用GCD和ARC支持ARM64位处理器。

2024-04-14 20:56:29 751

原创 OC高级编程 第3章:Grand Central Dispatch

Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用中记述线程管理用的代码在系统级中实现。开发者只要定义想执行的任务并追加到Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可以执行任务,这样就比以前的线程更加有效率。也就是说GCD用简洁的记述方法,实现了极为复杂繁琐的多线程编程。上面的就是在后台线程中执行长时间处理,处理结束时,主线程使用该处理结果的源代码。

2024-03-25 19:25:55 891

原创 O C高级编程 第二章: Blocks

Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数。“带有自动变量”在Blocks中表现为“截取自动变量"“匿名函数”就是“不带名称的函数”块,封装了函数调用及调用环境的OC对象block的声明// 1.// 2.BlockType:类型别名// 3.// 返回值类型(^block变量名)(参数1类型,参数2类型,...)block的定义// ^返回值类型(参数1,参数2,...){};// 1.无返回值,无参数// 2.无返回值,有参数。

2024-03-06 21:14:47 3181 1

原创 第五章 内存管理

这样的话,

2024-02-17 22:29:36 1017

原创 第四章:协议和分类

此模式可以将数据与业务逻辑解耦。比如说,用户界面里有显示一系列数据所用的视图,那么,此视图只应包含显示数据所需的逻辑代码,而不应该决定要显示何种数据以及数据之间如何交互的问题。视图对象的属性中,可以包含负责数据与事件处理的对象。

2024-02-02 22:22:20 763

原创 第三章 接口和API设计

你可能是把两个相互独立的程序库都导入到当前项目,而它们又恰好有重名的类。

2024-01-25 20:52:44 1447

原创 第二章 对象,消息,运行期

有时需要在对象中存放相关信息,这时我们通常会从对象所属的类中继承一个子类,然后改用这个子类对象。然而并非所有情况下都能这么做。OC中有一项强大的特性可以解决此问题,这就是“关联对象可以给某对象关联许多其他的对象,这些对象通过“键”来区分。存储对象值的时候,可以指明“存储策略”(storage policy),用来维护“内存管理语义”。假如关联对象成为了属性,那么它就具备对应的语义此方法以给定的键和策略为某对象设置关联对象值。此方法根据给定的键从某对象中获取相应的关联对象值。

2024-01-19 22:51:35 980 1

原创 第一章 熟悉Objective-C

反而破坏了程序。

2024-01-14 18:39:44 2258

原创 iOS ------ 调用高德地图SDK

4.输入pod install下载SDK(若下载的SDK不是最新版可输入pod repo update进行更新)将上面步骤获取的高德Key,配置到代码中,以保证地图功能的正常运行。这里使用CocoaPods安装SDK,方法和前面导入第三方库相同。1.打开终端,cd 文件路径 进入到所创建的项目文件中。2.输入pod init为该项目创建Podfile文件。1.import MAMapKit.h 头文件;3.将MAMapView添加到Subview中。3.编辑 Podfile 文件。申请 iOS Key。

2023-12-06 21:01:45 1129

原创 iOS ------ UICollectionView

一,UICollectionView的简介UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。

2023-12-04 21:54:28 1255 1

原创 知乎日报第四周总结

FMDB库的使用类似于C语言的文件操作,需要我们手动创库,之后编译器会生成一个文件用于数据的存储,当程序关闭后,文件中的内容也不会消失,当程序重新启动后,会继续利用从而达到本地持久化。以上面的查询为例,获取数据库文件的路径,获取数据库,注意文件的路径必须一样。数据的添加,删除,查询。

2023-11-12 19:56:53 245

原创 知乎日报第三周总结

最开始时我直接就在cell加载函数判断了回复的的行数并进行了相应的加载,导致在按钮的点击事件无法改变回复的展开与收回。这里需要先讲将每个评论cell的加载状态存放在数组里,没次cell的加载都通过每个评论cell的对应的数组内容进行判断,在按钮的点击事件里改变数组的内容,然后将tableView重新加载。2,对于评论的回复的展开和收起,我们需要先判断是否用回复,同时还要判断回复的行数是否超过两行,如果超过两行,就要添加回复的展开与收起按钮,否者就将按钮隐藏。对于如何计算评论的行数的代码。

2023-11-05 19:51:05 211

原创 知乎日报第二周总结

5.在写cell的滑动刷新时,发现新刷新的cell的具体内容添加的按钮无法触发点击事件,会发现在controller层根本没有给按钮添加点击事件,这时同样需要发送通知同时传值,让controller层接受通知并给这些按钮添加点击事件。3.在点击cell时想跳转到其他页面,在cell的点击事件里面推出新的页面发现没有效果,由于cell的点击事件被写在了view层无法去1实现跳转,需要写一个通知传值,让controller 接受通知并实现跳转。这样子就可以完美解决Cell的点击事件被覆盖无法执行的问题了。

2023-10-28 21:14:44 127

原创 知乎日报第一周总结

在使用网络请求请求数据时,导致在请求到的数据没有返回的时候程序就已经开始了UI布局,这里我将UI布局最终写在网络请求的Block回调中,但是因为线程原因,它没有回到主线程再进行UI布局又导致程序崩溃,这时候需要将程序回到主线程然后再进行UI的布局。将请求到的Model数据传值到View层,发现获取不到Model内的数据内容。我们需要重新创建一个Model类对象,然后将model数据赋值给Model数据才能使用。我们通过网络请求获取到的只有图片的地址,我们需要将其化为图片,首先,导入头文件。

2023-10-21 20:50:51 84

原创 使用Manager封装网络请求(使用AFN库,JSONModel)

JSONModel:一个解析JSON数据的开源库,可以将JOSN数据直接解析成自定义的model。

2023-10-14 21:40:40 119

原创 iOS------简易计算器

主要的计算过程就是将前面写过的C语言计算过程改为OC语言。不同的就是对于小数点和多位数的处理更为简单,OC可以将其字符串形式直接转化为数字。对于减法的处理就是将其作为加法计算。还有就是注意一些数组越界条件的约束。对于MVC模式,写的时候发现将按钮的点击事件Controller部分时候,点击没有效果,发现是在循环创建按钮时候出了问题,后来将每一个按钮都创建出来,并循环给每一个按钮添加点击事件就解决了。最开始对于按钮不知道怎么用Masonry布局,后来需要引入屏幕的宽和高。还有就是判错的处理,输入约束的处理。

2023-10-07 19:46:09 81

原创 中缀表达式转后缀表达式

3.2、如果为右括号,依次弹出栈顶元素入集合,并且再次对比,直到遇到左括号,弹出栈顶元素不入集合。4)-5,这样的表达式虽然容易被人所理解,但是不容易被机器所识别,为此推出了后缀表达式。后缀表达式又被叫做逆波兰表达式,逆波兰表达式不需要被括号所识别,且容易被机器识别。2.3、如果优先级比栈顶操作符低或者相等,则弹出栈顶元素入集合,再次进行对比。中缀表达式就是我们通常认知中的表达式,比如1+((2+3)2.1、如果栈为空,或者栈顶元素为’(’,直接加入栈。2.2、如果优先级比栈顶操作数高,直接加入栈。

2023-09-25 21:24:18 97

原创 iOS------ KVC

① 根据KVC搜索规则,当没有搜索到对应的key或者keyPath相关方法或者变量时,会调用对应的异常方法valueForUndefinedKey:或setValue:forUndefinedKey:,这两个方法的默认实现是抛出异常NSUnknownKeyException,并导致程序Crash。2.如果以上方法均未找到,且+ (BOOL)accessInstanceVariablesDirectly方法返回YES,则通过成员变量进行设置,顺序是:_name,_isName,name,isName。

2023-09-22 21:43:20 87

原创 OC高级编程 第一章:自动引用计数

在LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码。这在降低程序崩溃,内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。

2023-09-21 21:18:31 100

原创 C语言实现简易四则运算

四则运算中由于涉及到运算符的优先级,并不能从左往右计算,这里要应用栈的思想。创建两个数组栈,分别存放数字和运算符。遍历输入的字符串,如果是数字则依次放入到数字栈。如果是运算符,则需要与字符栈的栈顶运算符进行优先级的比较,如果比栈顶优先级高,则放入栈中,反正则取出数字栈的栈顶两个数字与字符栈的栈顶元素进行运算,并将运算结果放入数字栈。

2023-09-20 21:53:21 447

原创 iOS------UIColor和CGColor

UIColor是UIKit中存储颜色信息的一个重要的类,一个UIColor对象包含了颜色和透明度的值,它的颜色空间已经针对IOS进行了优化。UIColor包含了一些类方法用于创建一些最常见的颜色,如白色,黑色,红色,透明色等,这些颜色的色彩空间也不尽相同(白色和黑色是kCGColorSpaceDeviceGray,红色的色彩空间是kCGColorSpaceDeviceRGB)。2) components,一个CGFloat的数组,该数组的元素个数是指定色彩空间包含的颜色分量数n,加上对应的alpha值。

2023-09-15 20:09:56 138

原创 iOS------ present和push

1.present和push都用于iOS的视图切换,并且控制器切换都是可逆的,原始视图不会被销毁。还有一种切换视图的方式切换window的rootViewController是不可逆的,且原始视图会被销毁。2.present一般用于不同业务界面的切换,push一般用于同一业务不同界面的切换。3.present和dismiss对应,push和pop对应4.present只能逐级返回,push虽有视图由栈控制,可以返回任意级。

2023-09-15 19:09:53 167

原创 iOS------ViewController的生命周期

当控制器的 loadView 方法执行完毕,view 被创建成功后,就会执行viewDidLoad 方法,该方法与loadView 方法一样,也有可能被执行多次,比如 A 控制器 push 出 B 控制器,此时,窗口显示的是 B 控制器的 view,此时如果收到内存警告,我们一般会将 A 控制器中没用的变量及 view 销毁掉,之后当我们从 B 控制器 pop 到 A 控制器时,就会再次执行A控制器的 loadView 方法与 viewDidLoad 方法。5、视图出现后的时候调用。3、视图被加载后调用。

2023-09-14 20:05:28 128

原创 iOS------单例模式

单例:该类在程序运行期间有且仅有一个实例。为了我们能更好的理解单例模式,我列举以下几个cocoa框架中常用的单例:1.UIApplication:应用程序。一个UIApplication对象就代表着一个应用程序,每个应用程序有且仅有一个UIApplication对象,开发中最常用的是使用它的openURL函数来跳转到其他应用程序,通过[UIApplication sharedApplication] 类方法可以获得。2.NSNotificationCenter:通知中心。

2023-09-12 21:38:38 61

原创 iOS------五大传值的比较

block是一种轻量级的回调,可以直接访问上下文,由于block的代码是内联的,运行效率更高。block就是一个对象,实现了匿名函数的功能,所以可以把block当作一个成员变量,属性,参数使用,使用起来更加灵活。不同:代理比通知的效率高。通知需要被观察者先主动发出通知,然后观察者注册监听后,在进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,可以进行多种多样的状态变化进行监听,监听范围广,使用灵活。而且,需要传值的属性不能是私有属性,也就是在.h中声明出来的属性才可以传值。

2023-09-07 21:29:36 42

原创 iOS------MVC模式

MVC(Model—View—Controller,模型—视图—控制器)是软件工程中的一种软件架构模式,它把软件系统分为三个基本模式:模型(model),视图(view),控制器(Controller)。MVC不是一种设计方式(design Pattern), 而是一种架构模式(Architectural Pattern),用于描述应用程序的结构以及结构各个部分的职责和交互方式。

2023-09-06 21:37:52 103

原创 iOS的五大传值

在进入下一个界面时,下一个界面的viewDidLoad还没有加载,我们可以在后一个界面设置一个接受前一个界面传过来的值的属性,传过来的值也是前一个页面的属性。适用场景:已经通过push的方式进入到子页面,在从子页面返回主页面的时候(子页面会释放掉内存),需要在主页面中使用子页面中的数据,这是就可以利用代理反向传值。协议传值是将值从后面的以页面传到前面的页面,当我们返回前面的页面,此时前面的页面已经加载过一次,不会重新加载,此时就要用到协议传值。属性传值是一种将值从前面的页面传到后面的页面的传值方式。

2023-09-02 21:20:12 143

原创 iOS关键字(copy和strong)

当原对象为可变对象时,将原对象赋给strong修饰的不可变对象,修改原对象,那我们不可变的对象也会随之改变。copy修饰不可变对象,原对象为可变对象时,将原对象赋值给属性,会将原对象进行copy,此时是深复制,两个对象指向的不同的地址,属性所指的是可变对象的副本,原对象如果被修改的话,不会影响属性的值。copy修饰可变对象,如果原对象是可变对象并赋值给属性,此时进行的是深复制,属性指向的是原对象的不可变副本,即此时属性为不可变对象,这时对属性进行增删改的操作,就会因为找不到方法而报错。

2023-09-01 22:13:42 273

原创 折叠Cell

折叠cell就是通过按钮的状态来改变tableView的cell数量和cell的内容,通过判断button的状态对tableView的数据更新, 也可以通过其他的东西进行判断。

2023-08-31 22:20:57 60

原创 Masonry的简单使用

目前iOS开发中大多数页面都已经开始使用interface Builder的方式进行UI的开发,但是在一些变化比较复杂的界面,还是需要通过代码来进行UI开发的,而且有很多比较老的项目,本身还是采用纯代码的方式进行开发。但如果在项目中根据不同屏幕的尺寸进行各种判断,死写坐标的话,这样开发起来是很吃力的。Masonry为了让代码使用和阅读更容易理解,所以直接通过点语法就可以了调用,还添加了and和with这两个方法,则两个方法内部上什么都没有干,只是在内部将self直接返回,共嫩就是为了更加方便阅读。

2023-08-31 21:19:39 102

原创 天气预报的总结

天气预报的主要内容主要是网络请求,网络请求的内容的形式主要是字典,里面的结构比较复杂,会嵌套数组字典,你可以查看请求的样例理清结构,然后获取你需要的信息。这里还有跨越多个界面的传值,这里要用到代理传值,界面的切换尽量使用push和pop不然代理传值不起作用。还有界面间的传值需要注意将数据以那种方式传递,这样会减少代码。

2023-08-28 20:02:48 42

原创 学生管理系统的总结

学生管理系统主要是对学生信息的增删查改,学生的名字,班级,分数分别存放在不同的数组并进行相应的操作。这里的主界面和每个功能的界面都要显示学生的信息且要同步,这里需要用到属性传值和协议传值。这里的传值主要以数组的形式传值。操作成功后需要给tableView进行数据更新。

2023-08-28 19:36:05 54

原创 3Gshare的总结

实现账号的登录注册,这里用到属性传值和协议传值,开始只用到协议传值,将注册的账号密码传到登录界面并存在两个数组,进行账号的登录,由于在注册页面没有判断账号有没注册,又用到属性传值将两个数组传回注册页面。先在照片墙页面将选中的照片存在一个数组,在将数组协议传值到上传界面,在上传界面,获取数组的第一张照片和照片的数量。这里还用到属性传值判断多次上传时,不能选中同一照片。选中多张照片,在上传界面显示第一张,并显示照片的数量。这里也要多加两张图。

2023-07-30 20:23:03 69 1

空空如也

空空如也

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

TA关注的人

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