自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【iOS开发】—— KVO原理

主要用了isa-swizzling,修改了观察者的类信息,并且hooksetter方法,当setter方法调用时发送消息给所有观察者。由上面源码可以看出对观察者、被观察者的引用都是Not Retain, 所以对象释放前一定要移除观察者。

2024-05-19 16:20:43 725

原创 【iOS开发】—— 初识锁

自旋锁是一种同步机制,用于在多线程环境中保护共享资源的访问。它通过循环忙等待的方式,而不是阻塞线程,来实现对共享资源的互斥访问。1.区别:等待机制互斥锁是阻塞锁,当锁被其他线程占用时,请求线程会被阻塞;自旋锁是忙等待锁,请求线程会循环忙等待,不断检查锁的状态。CPU占用自旋锁是忙等待,当线程持有自旋锁时间较长时,其他等待线程会一直忙等待,浪费CPU资源;互斥锁是阻塞,当线程请求锁时,会被阻塞,释放CPU资源给其他线程。适用场景自旋锁适用于多核心CPU、共享资源占用时间较短的情况;

2024-05-12 11:29:15 671

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

程序员负责在何时释放内存,在ARC程序中,计数器为0的时候,在当次的runloop结束后,释放掉内存。由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收 ,比如变量通过new、alloc、malloc、realloc分配的内存块就存放在堆区。,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放。缺点:存在的生命周期长,从定义直到程序结束。栈区(系统管理的地方),堆区(程序员管理的地方),常量区,全局区(静态区),代码区。

2024-05-08 22:13:15 849

原创 【iOS】-- Runloop初学

简单的说RunLoop是一种高级的循环机制,让程序持续运行,并处理程序中的各种事件,让线程在需要做事的时候忙起来,不需要的话就让线程休眠。在App运行的过程中,主线程的Runloop保证了主线程不被销毁从而保证应用的存活,从而能实时接收到用户的响应事件,能够触发定时事件。如果没有Runloop的话,程序执行完代码就会立马return。

2024-04-29 22:16:45 837

原创 iOS -- 工厂设计模式

专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常具有共同的父类。抽象工厂模式里每个工厂都会生产多种产品,但不同工厂生产的产品属于不同的系列。简单工厂模式将对象的创建和使用分离,使得客户端代码更加灵活,并且可以降低代码的耦合度。**聚合:**表示一个类与其他类之间存在关联关系,其中一个类是另一个类的容器或集合,但这些类之间的关系并不是强依赖的关系。当系统中加入新产品时,除了需要提供新的产品类之外,还要提供与其对应的具体工厂类。

2024-04-19 23:12:05 1208 1

原创 【iOS】—— SDWebImage源码学习(2)(源码解读)

这里我们先看看SDWebImageDownloader。

2024-04-17 18:32:15 1240

原创 【iOS】—— SDWebImage源码学习(1)(未完)

在日常的使用中,通常是加载网络图片到UIImageView上展示,所以一般在需要使用SDWebImage的文件中只引用#import "UIImageView+WebCache.h"头文件。是一个枚举类型的值,用于设置加载图片的选项。这样就可以有下载进度的回调和下载完成的回调,可以在回调完成进度条相关的操作和显示图片相关的操作。在网络图片加载过程中,ImageView会显示占位图像,给用户一个视觉上的暂时反馈。当网络图片加载完成后,ImageView中会显示加载完成的图片。

2024-04-14 17:45:00 952

原创 iOS —— 初识KVO

KVO传值也很简单,可以理解为我们对第二个viewController的某一个属性做一个监听,当我们跳转到第一个viewController的时候就可以监听到值的改变。KVO是一种开发模式,它的全称是Key-Value Observing (观察者模式) 是苹果Fundation框架下提供的一种开发机制,使用KVO,可以方便地对指定对象的某个属性进行观察,当属性发生变化时,进行通知,告诉开发者属性旧值和新值对应的内容。在textFiled中写入文本,然后通过按钮进入到下一个界面。

2024-03-28 20:55:12 1317

原创 【Objective -- C】—— GCD(1)(Grand Central Dispatch)

GCD的全称是Grand Central Dispatch,是异步执行任务的技术之一。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。为了开发者的方便,我们只需要定义想执行的任务并追加到适当的dispatch Queue中GCD就能自动生成必要的线程并计划执行任务,提升了效率。为什么使用GCDGCD 可用于多核的并行运算;GCD 会自动利用更多的 CPU 内核(比如双核、四核);GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程);

2024-03-24 16:32:40 912

原创 【Objective -- C】—— block

block是一个带有自动变量值的匿名函数,它也是一个数据类型,跟int double float一样都是数据类型.所以我们是可以创建一个block类型的变量。总结来说:block类似于一个方法。而每一个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失,所以,方法的内存不需要我们管理,也就是说,方法是在内存的栈区。所以,block不像OC中的类对象(在堆区),他也是在栈区的。

2024-03-16 17:54:41 941

原创 【Objective -- C】—— 自引用计数

但是,在产生大量autorelease的对象的时候,只要不放废弃NSAutoreleasePool对象,那么生成的对象就不能被释放,因此有时会产生内存不足的现象。典型的例子是读入大量图像的同时改变其尺寸。图像文件读入到 NSData 对象,并从中生成 UIImage 对象,改变该对象尺寸后生成新的 UIImage 对象。这种情况下,就会大量产生 autorelease 的对象。

2024-03-09 18:55:34 862

原创 【Effective Objective - C】—— 系统框架

无缝桥接”技术其实就是不同库之间相同类型的相互转换。使用“无缝桥接”技术,可以在定义于Foundation框架中的OC类和定义于CoreFoundation框架中的C数据结构之间互相转换。转换操作中的__bridge告诉ARC如何处理转换所涉及的OC对象。__bridge本身的意思是:ARC仍然具备这个OC对象的所有权。而__bridge_retained则与之相反,意味着ARC将交出对象的所有权。

2024-02-21 15:36:30 783

原创 【Effective Objective - C】—— block 块

本章的内容是比较麻烦复杂的一章,牵扯到了GCD和Block,在之前也有学习过,本章作以深入的了解。多线程问题是开发应用程序的时候最让人头疼的问题,尤其是线程阻塞,在更新了Mac之后我经常的遇到了彩虹小球的问题,当然在开发的时候还没有出现过线程阻塞问题。

2024-02-19 17:31:01 1213

原创 【Effective Objective - C】—— 内存管理

OC是一门面向对象的语言,而面向对象语言里内存管理是一个重要的概念,想用一门语言写出内存使用效率高的代码就得掌握其中的细节,在OC引入ARC模式之后内存管理的事情几乎都是由编译器来决定的,这使我们学习内存管理变得简单许多。

2024-02-17 20:31:13 754

原创 iOS控件 -- UICollectionView (瀑布流)

UICollectionView是一个功能十分强大的控件,用法上和UITableView比较相似。

2024-02-02 19:26:07 989

原创 【Effective Objective - C】—— 协议与分类

协议和分类这一章也是讲述了使用协议和分类需要注意的细节和很多能够在实际用途用到的方法,比如使用class-continuation分类隐藏实现细节等等。

2024-01-31 16:10:56 922

原创 【Effective Objective - C】—— 接口与API设计

这一章节主要学习的是Objective - C语言的编程规范。如果方法的返回值是新创建的,那么方法名的首个词应是返回值的类型,除非前面还 有修饰语,例如localized String。属性的存取方法 不遵循这种命名方式,因为一般认 为这些方法不会创建新对象,即便有时返回内部对象的一份拷贝, 我们也认为那相当 于原有的对象。这些存取方法应该按照其所对应的属性来命名。应该把表示参数类型的名词放在参数前面。如果方法要在当前对象上执行操作,那么就应该包含动词;

2024-01-24 11:38:32 1153

原创 【Effective Objective - C】—— 对象,消息,运行期

public@private@end@public@private@end我们新添加的实例变量就会代替原第一个位置实例变量的偏移量。这样的话,如果代码使用了编译器计算出来的偏移量,那么在修改类定义之后必须重新编译,否则就会出错。例如:某个代码库中的代码使用了一份旧的类定义。如果和其相链接的代码使用了新的类定义,那么运行时就会出现不兼容现象。对此类问题,OC的解决方法是,把实例变量当做一种存储偏移量所用的“特殊变量”,交由“类对象”保管。

2024-01-19 18:08:40 917

原创 【Effective Objective - C】—— 熟悉Objective-C

此类常量必须要定义,而且只能定义一次。通常将其定义在与声明该常量的头文件相关的实现文件里。

2024-01-12 18:56:34 1369

原创 【iOS】网络请求GET与POST

从上边两个不难看出两个的区别,无非就是post多了一个请求体,其他的也没什么区别,但是post的好处还有很多,首先它的保密性和安全性就比较高,所以以后我们还是尽量多使用post请求数据的好,另外上述说的仅仅只是使用系统自带方法的代码,当然你也可以使用第三方库,比如AFNetworking它使用起来就更加方便。

2023-12-08 21:37:17 1165 1

原创 【iOS控件】—— UIPickerView的使用

UIPickerView是iOS平台上的一个用户界面元素,用于在应用程序中显示和选择多个选项中的一个。它通常以类似于滚轮的形式呈现,允许用户通过滑动手势来选择列表中的项目,UIPickerView由一个或多个组件(Component)组成,每个组件都表示一个独立的选项列表。每个组件可以包含多个行(Row),每一行代表一个具体的选项。用户可以通过滑动每个组件的滚轮来选择特定的行。

2023-12-03 21:32:04 984

原创 【iOS-UIImagePickerController访问相机和相册】

UIImagePickerController是iOS平台上的一个类,用于在应用程序中访问设备的照片库、相机和视频录制功能。它提供了一个用户界面,使用户可以从设备的媒体库中选择照片或视频,或者使用设备的摄像头拍摄照片或录制视频。在这里我们先只介绍一下访问相机和相册这两个功能。

2023-11-26 21:19:51 1620

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

FMDB是一个在iOS和Mac应用程序中使用SQLite数据库的第三方库。它是使用Objective-C编写的,提供了一个简单易用的接口,用于执行SQL查询和操作数据库。FMDB封装了SQLite C语言接口,简化了数据库操作的复杂性,并提供了一些便捷的方法和功能,使开发者可以更轻松地进行数据库的读取、写入和查询操作。使用FMDB库,你可以执行SQL语句来创建、修改和查询数据库表格,插入、更新和删除数据等。

2023-11-19 20:25:36 76

原创 [iOS]--知乎日报第四周总结

可以通过Massonry来实现效果,可以借助 UITableView 的 estimatedRowHeight 和 rowHeight 属性,以及 Masonry 的自动布局功能。通常对数据库的操作,我们一般称为CURD,即对表进行创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。首先,确保你的 UITableViewCell 中的子视图使用了 Masonry 进行自动布局。

2023-11-12 22:08:04 58

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

点击之后还要实现无限滑动的stories,这里采取的思路是每次加载三个视图在滑动的时候不断改变中间视图的数据信息就可以实现无限滑动的效果了,基本思路就是无限轮播图的思想。cell的点击事件需要通过考虑组数与行数的数量关系来确定出来点击得到底是哪一个stories的cell,从而加载到正确的stories中。

2023-11-05 22:07:19 102

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

WKWebView 是 iOS 中用于加载和展示网页内容的视图组件,具有高性能、支持现代 Web 标准和 JavaScript 交互能力,以及增强的安全性。它为开发人员提供了强大的功能和灵活性,使得在应用程序中集成网页内容变得更加便捷和高效。

2023-10-29 21:30:48 57 1

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

我通过网络请求的图片只是这个图片的字符串形式的URL地址,还需要将这个图片的URL地址转换成URL,接着通过URL才能加载图片到指定的UI控件上。对于UI布局来说,因为需要用到导航栏的相关UI,所以将导航控制器作为根视图,然后通过导航栏的titleView属性,往上面添加控件。当我进行完网络请求的数据赋值后,给我布局的UI元素时,运行时总是会导致程序崩掉,查了下原因是进行完赋值后程序还没回到主线程进行UI布局,所以我加了下面这个方法让程序回到主线程进行布局。

2023-10-23 16:40:37 77

原创 【iOS】—— JSONModel的使用

做移动端开发,解析网络数据是必不可少的工作之一。iOS原生框架很早前就已经提供了将JSON数据直接映射成数组或者字典对象的方法,并且结合KVC,也可以将字典数据直接赋值给对象。但是这种方式十分不灵活,例如如果网络数据中的字段与我们数据模型中的字段不一致,某些网络数据的字段可能为nil等等都需要开发者单独的处理。使用JSOMModel可以十分方便的处理映射过程中的各种情况。越来越多的移动应用更倾向于用JSON这种数据格式。

2023-10-21 19:10:39 213

原创 【iOS】计算器实现

仿写iOS的计算器,使用了MVC模式和masonry库。

2023-10-08 20:18:08 174

原创 【iOS】—— 初识KVC

复合属性”,KVC机制将其称为Key路径。例如,FKOrder对象中包含一个FKItem类型的item属性,而FKItem对象又包含了name属性以及price属性,因此KVC可以通过item.name和item.pricez这种路径来支持操作FKOrder对象的name,price属性。当调用KVC来设置对象的属性的时候,属性的类型为基本类型(int,float,double),如果为基本类型的属性设置一个nil,会出现什么效果呢?KVC处理操作对象的属性之外,还可以操作对象的属性的“复合属性”。

2023-09-23 17:50:21 44

原创 【Objective-C】引用计数

顾名思义,自动引用计数 (ARC, Automatic Reference Counting )是指内存管理中对引用采 取自动计数的技术。以下摘自苹果的官方说明:在Objective-C中采用Automatic ReferenceCounting (ARC) 机制,让编译器来进行内 存管理。在新 一代Apple LLVM编译器中设置ARC 为有效状态,就无需再次键入retain 或 者release 代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序 的工作量。

2023-09-23 17:48:26 48

原创 ViewController的生命周期

ViewController是iOS开发中MVC框架中的C,ViewColllecter是View(视图)的Collecter(控制器)。ViewController的职责主要包括管理内部各个View的加载显示和卸载,同时负责与其他ViewController的通信和协调。iOS中的ViewController分为两种:ViewController的流程执行如下图所示:(void)loadView:加载view。这个方法中,要正式加载View了,控制器 view 是通过懒加载的方式进行加载的,即用到的时

2023-09-17 16:00:00 104

原创 【iOS】push和present,UIColor和CGColor

可以通过使用预定义的颜色常量(如红色、绿色、蓝色等)或使用自定义的RGB、HSB或灰度值创建UIColor对象。在iOS开发中,"push"也可以指代导航栈中的视图控制器之间的切换方式,即将一个视图控制器推入(push)到导航栈中显示的操作。它提供了一种在应用程序中显示新视图控制器的常用方法,常用于呈现模态视图控制器、弹出框、警告视图等。然后在要弹出的界面是采用present,逐层推出视图控制器,如果想要返回前面的视图的话,就可以在代码中添加presentingViewController。

2023-09-17 15:58:15 48

原创 【iOS】—— 单例模式

单例模式是一种软件设计模式,旨在确保一个类只有一个实例,并提供全局访问点以获取该实例。它限制了类的实例化过程,以避免多个实例的创建,并提供一种方便的方式来访问该实例。

2023-09-17 15:57:31 155

原创 【iOS】—— MVC框架

MVC(Model-View-Controller)是一种软件设计模式,用于组织和管理应用程序的代码和逻辑。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),每个组件负责不同的责任。MVC是cocoa应用良好设计的核心。采用这种模式的好处很多。这些应用程序中的许多对象往往更易于重复使用,其接口往往定义得更好。具有MVC设计的应用程序也比其他应用程序更容易扩展。此外,许多Cocoa技术和架构都基于MVC,并要求您的自定义对象扮演MVC角色之一。

2023-09-11 20:52:26 152

原创 iOS五大界面传值

将函数及其执行上下文封装起来的对象,block的调用实际就是函数的调用。

2023-09-11 16:12:18 155

原创 属性关键字

当我们既定义了@synthesize,又在实现文件中人为重写setter和getter方法时,那么@synthesize将不再工作,也就不会为我们创建没有定义的_propertyName成员变量了,这时候如果在setter和getter方法中调用_propertyName将会发生编译错误。当我们在实现文件中不写@synthesize properyName时在Xcode4.5之前的版本不会帮我们自动生成setter与getter方法,系统当然也不再会为我们生成对应的成员变量。

2023-09-02 16:09:30 26

原创 安装Cocoapods流程及导入第三方库Masonry

Homebrew是一款包管理的工具。在下面的选项中笔者一般习惯选择中科院的镜像:如果出现下面这种情况,则是因为没有安装XCode,这是应该先安装XCode,然后在终端重新上面操作。

2023-09-02 16:08:24 323

原创 【第四周总结】天气预报

这一周要写的内容为天气预报,天气预报主要的思路是要进行简单的网络情求,获取天气预报的实时数据,并且把数据存储在数组中进行界面传值(以通知传值和属性传值为主)。

2023-08-16 20:30:48 35

原创 【第三周总结】学生管理系统

学生管理系统中主要是用的是也是协议传值,在这之后也学习了通知传值,以及属性传值。

2023-08-08 10:23:57 28

空空如也

空空如也

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

TA关注的人

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