自定义博客皮肤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)
  • 收藏
  • 关注

原创 iOS——属性关键字

property关键字可以自动生成某个成员变量的setter和getter方法的声明。

2022-07-31 18:33:42 380 1

原创 iOS——MRC和ARC实现原理

Objective-C提供了两种内存管理机制MRC(MannulReferenceCounting)和ARC(AutomaticReferenceCounting),为Objective-C提供了内存的手动和自动管理。下面我们来探讨一下MRC和ARC的实现。

2022-07-24 18:58:59 1447

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

我们看demo定义结构体Test1和共用体Test2intage;};intage;};输出结果简单理解结构体会给所有的成员变量按照内存对齐规则分配内存,所以分配了24字节的内存。联合体里的变量内存是公用的,所以只需要开辟一个最大变量需要的内存就够了,最大的是double类型的所以分配了8个字节。内存对齐1.对于结构体的各个成员,第一个成员的偏移量是0,排列在后面的成员其当前偏移量必须是当前成员类型的整数倍struct{1;............

2022-07-24 18:58:45 647

原创 iOS——编译与链接

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

2022-07-24 18:58:26 674

原创 iOS——事件、响应链和传递链

在讨论事件、响应链和传递链之前,我们先来认识一下相关的几个类。该类下的核心方法大家应该都见过:所以所有能调用这个方法的控件,比如UIButton、UITextField等等,都是继承自这个类。UIControl的主要功能:为一些交互类控件添加action。它控制一个控件在某个状态下(比如按下、抬起等)要发生什么事件。是由硬件捕获到的一个表示用户操作设备的对象,事件分为三类:包括触摸事件(Touch Events对应就是UITouch)、运动事件(Motion Events)、远程控制事件(Remote C

2022-06-12 18:27:45 451

原创 iOS——设计模式之工厂模式

维基百科中的设计模式 (计算机):可以这么说,计算机中设计模式指的是一套广为人知、被反复使用、经过分类编目的代码设计经验。使用设计模式是为了可重用代码,让代码更容易被他人理解,最重要的是保证代码可靠性。一篇很好的iOS设计模式原则介绍:iOS开发 - 面向对象设计的六大设计原则(附 Demo & UML类图)开闭原则的核心是:对扩展开放,对修改关闭。在程序需要进⾏拓展的时候,不能去修改原有的代码,⽽是要扩展原有代码,实现⼀个热插拔的效果。所以⼀句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样

2022-06-05 19:46:52 316

原创 iOS——SDWebImage解读

前言在iOS的图片加载框架中,SDWebImage占据了大半壁江山。它提供了UIImageView的一个分类,支持从网络中下载且缓存图片,并设置图片到对应的UIImageView控件或者UIButton控件。在项目中使用SDWebImage来管理图片加载相关操作可以极大地提高开发效率,让我们更加专注于业务逻辑实现。SDWebImage功能功能特性一个添加了web图片加载和缓存管理的UIImageView分类一个异步的图片加载器一个异步的内存加磁盘综合存储图片并且自动处理过期图片支持GIF(4

2022-05-04 18:24:42 3279 3

原创 iOS——内存分配与分区

存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。iOS的存储器包括RAM(random access memory,运行内存)和ROM(Read-Only Memory,只读存储器)。1、RAM & ROMRAM:运行内存,不能掉电存储。ROM:存储性内存,可以掉电存储,例如内存卡、Flash。由于 RAM 类型不具备掉电存储能力(即一掉电数据消失),所以 app 程序一般存放于 ROM 中。RAM 的访问速度要远高于 ROM,价格也要高。2、App程序启动App 程序启动

2022-04-24 18:46:49 1827

原创 iOS——浅析UITableView中cell的重用机制

什么是UITableViewCell?UITableView可以说是UIKit中最重要的一个组件,在主流App中基本都会出现(聊天列表,个人设置等)。它用来展示数据列表,还可以灵活使用进行页面的布局。UITableView继承自UIScrollView,可上下滑动,可以作为跟视图也可以作为子视图组件。而UITableViewCell,是UITableView中的数据载体,也就是我们见到表格中的一个个小单元。对象池模式对象池模式是iOS设计模式中的一种创建型模式,通过回收不再使用的对象,避免创建和销毁对

2022-04-17 16:46:40 4713

原创 iOS——判断刘海屏

在写项目时,发现在非刘海屏型号的iPhone上测试的UI界面,有时候在刘海屏iPhone会被遮挡。这时候,我们需要判断当前设备是否是刘海屏,以来对UI代码做相应的适配,以下是学习的几种方案。判断手机型号iPhone的发展历史中,手机屏幕从来不是一尘不变的。从home键非全面屏到取消home键刘海屏,苹果公司一直在屏幕上做改变。并且不只是屏幕,耳机孔、按键等也在不断发生变化。所以在目标机型是所有iPhone的iOS开发中,判断手机型号是必要的。下面是判断手机型号的步骤。引入头文件,声明类方法#impo

2022-03-26 02:14:11 5860

原创 iOS——GET、POST请求方法(NSURLSession)

关于NSURLSession使用NSURLSession,一般有两步操作:通过NSURLSession的实例创建task;执行task。而NSURLSessionTask,也就是task,可以把它当作所谓的任务。NSURLSessionTask是一个抽象子类,它有三个可以直接使用的具体子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。这三个类应用的三个基本网络任务:获取数据、上传文件、下载文件。与数据有关的N

2022-03-20 15:41:30 1347 1

原创 iOS——应用内调用Face ID、Touch ID

注意到很多iOS非原生应用都在应用内调用了Face ID,以来辅助登陆和进行隐私操作的确认,下面是如何调用Face ID或Touch ID。获取用户隐私权限类似调用定位和相机,首先在Info.plist中添加Face ID权限Privacy - Face ID Usage Description引入头文件引入Face ID、Touch ID的库文件#import <LocalAuthentication/LocalAuthentication.h>核心方法判断设备是否支持Fa

2022-03-06 11:40:31 5362

原创 iOS——CABasicAnimation

什么是CABasicAnimationCABasicAnimation是核心动画类簇中的一个类,其父类是CAPropertyAnimation,祖父是CAAnimation。它主要用于制作比较单一的动画,例如:平移、缩放、旋转、颜色渐变、边框的值的变化等,也就是将layer的某个属性值从一个值到另一个值的变化,类似x -> y这种变化。但是对于x -> y -> z甚至更多的变化,它是做不到的。相关属性属性说明duration动画的时长repeatCou

2022-02-27 23:41:04 429

原创 Block与GCD

“块”的概念块的基础知识块与函数类似,区别为它直接被定义在另一个函数里,和定义它的那个函数共享同一个范围的内容。块用“^”符号来表示,后边跟着一对花括号,括号里面是块的实现代码。^{ //Block}块的本质是一个值,而且有其相关类型。与int、float或OC对象一样,也可以把块赋值给变量,然后像使用其他变量那样使用它。块的语法与函数指针近似://块的语法结构return_type (^block_name)(parameters)//块的简单使用方法//定义块int

2022-02-20 17:35:47 1388

原创 iOS——6种系统手势操作

UIGestureRecognizer(手势识别器)手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。iOS 系统在 3.2 以后,他提供了六种常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。UIPanGestureRecognizer(拖动)UIPinchGestureRecognizer(捏合)UIRotationGestureRecognizer(旋转)UITapGestureRecognizer(点按)UILongP

2022-02-06 01:58:52 1837

原创 GitHub高级搜索

在GitHub进行搜索的时候,有时候普通搜索的结果过于冗杂,不便于我们找到我们想要的东西。GitHub提供了高级搜索,可以让我们更加迅速的找到我们想要的东西。直接限制关键词关键词language:开发语言location:开发者所在地语法关键词 :搜索内容eglanguage :c++location :china限制关键词中内容关键词name:项目名称description:项目描述readme:项目帮助文档语法搜索内容 in:关键词多个关键词可用,分开,表示逻辑

2022-01-10 09:49:16 2486

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

当今的app中,地图随处可见。不管是美团、饿了吗的骑手位置,还是共享单车的扫车、还车,都少不了地图的使用。小组的项目计划也有地图部分,这里记录一下调用高德地图sdk的过程。官方指南通过CocoaPods安装SDK创建项目,获取 CocoaPods后,我们就可以通过CocoaPods安装SDK了。Podfile文件内容:platform :ios, '14.0' //设备的iOS系统target 'MapTest' do //项目名pod 'AMap2DMap' //可选2

2021-12-12 17:42:03 2400

原创 知乎日报仿写小记

前言学习iOS已经半年有余,之前的学习中也陆陆续续写过一些小demo,这是第一次正式记录一下自己仿写项目的过程。运行环境与整体框架Xcode版本:Version 12.5模拟机系统版本:iOS 14.5整体设计模式:MVC模式用到的第三方库:JSONModel、FMDB、SDWebImage、SDWebImage主页部分主页主页效果主页顶部的 NavigationBar 中,leftBar 为今天日期和提示语 ,rightBar 为用户头像,点击进入设置界面。主页的 table

2021-12-05 14:04:11 1462

原创 Xcode——无证书真机调试

Xcode自带虚拟机调试,但是有许多功能是虚拟机所不具备的(如电话、相机、音频输入、电池状态等),这些基于真实硬件的API由于模拟器本身的限制,是不能被模拟出来的。因此只要需要调用这些API的,都应该选择真机调试。测试Xcode版本:Version 12.5真机系统版本:iOS 14.2创建证书Xcode->Preferences添加账号->添加Apple ID右下角->Manage Certificates左下角->添加Apple Development配

2021-11-27 19:21:48 5032

原创 OC包装下的轻量SQL——FMDB

什么是FMDB官方介绍:This is an Objective-C wrapper around SQLite.FMDB是针对libsqlite3框架进行封装的三方数据库,它以OC的方式封装了SQLite的C语言的API,使用步骤与SQLite相似。FMDB的GitHub链接 FMDB的优缺点优点使用时面向对象,避免了复杂的C语言代码对比苹果自带的CoreData框架,更加轻量级和灵活提供多线程安全处理数据库操作方法,保证多线程安全跟数据准确性

2021-11-14 19:03:45 1644

原创 Xcode——#pragma mark

文章目录#pragma#pragma mark#pragma mark#pragma mark -实际效果one more thing#pragma从理论上讲,以#pragma开头的代码是一条编译器指令,是一个特定于程序或编译器的指令。它们不一定适用于其它编译器或其它环境。如果编译器不能识别该指令,则会将其忽略。如使用#pragma clang diagnostic ignored "-W警告名",可以在Xcode中防止编译器警告:警告抑制语法而本文要讨论的#pragma mark,在Xcode中起

2021-11-09 19:20:21 510

原创 iOS——简单实现图片渐变

文章目录提取主色调为UIView添加渐变色实现效果在仿写知乎日报的时候,发现主页的轮播图上图片有渐变效果,这样不仅可以增加视觉效果,下方图片的文字注释也更加清晰,这里记录一下自己的仿写过程。知乎日报——效果图1知乎日报——效果图2 提取主色调首先我们注意到,不同图片的渐变颜色是不一样的,因为只有对每张图片选择适合的主色调,渐变出来的效果才会和谐。找到的方法:iOS根据图片获取图片的主色调为了符合每张图片大小,将图片成比例缩放。before:CG

2021-11-07 20:04:06 2085 2

原创 iOS——JSONModel第三方库与Manager封装网络请求

什么是JSONModelJsonModel是用Objective-C写的开源库。它包含了接受发送、解析JSON数据,用JSON数据驱动初始化你的类,还能够检验JSON和嵌套模型等功能。简单来说,当我们向服务器发送一个请求之后,通过JSONModel把数据转成model中的属性,就可以很方便的供给我们使用了。JSONModel的使用配置Cocoapods环境和安装JSONModel第三方库引用#import "JSONModel.h",建立一个Model类,让其继承JSONModel将请求到的j

2021-10-17 17:41:32 629

原创 栈(stack)与队列(queue)

栈栈(stack)是限制对元素的插入(push)和删除(pop)只能在一个位置上进行的表,该位置是表的末端,叫做栈的栈顶(top)。初次理解栈,你可以把它理解为一种特殊的数组,元素在栈顶添加和删除。栈且对栈遵循后进先出(LIFO——Last In First Out)的原则。...

2021-09-26 21:09:09 805

原创 iOS——单例模式

单例模式是什么单例模式,就是在一个应用程序中,对应的一个类只会有一个实例,无论创建多少次,都是同一个对象。这样就可以避免重复创建,节省内存。一般在程序中,经常调用的类,如工具类、公共跳转类等都会采用单例模式。在程序中,一个单例类在程序中只能初始化一次,为了保证在使用中始终都是存在的,所以单例是在存储器的全局区域,在编译时分配内存,只要程序还在运行就会一直占用内存,在APP结束后由系统释放这部分内存。系统提供的单例类UIApplication(应用程序实例类)NSNotificationCente

2021-09-21 16:39:05 257

原创 iOS——push与present

使用方法push&pop使用UINavigationController时使用push方法:[self.navigationController pushViewController:xxx animated:BOOL];返回时使用pop方法:[self.navigationController popViewControllerAnimated:BOOL];present&dismiss其他时候用present方法:[self presentViewController:

2021-09-21 15:32:38 205

原创 iOS——ViewController的生命周期

引言本篇文章是对ViewController从出现、产生作用到消失过程的探究,即ViewController的生命周期。ViewControllerViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,管理着应用中的众多视图。 iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarCon

2021-09-19 15:22:13 1225

原创 iOS——MVC设计模式

一、MVC是什么MVC是Model、VIew、Controller,即模型、视图、控制器,用数据(模型)、界面显示(视图)、业务逻辑(控制器)分离的方法组织代码,是一种软件设计的规范。模型Model模型负责各个功能的实现(如登录、增加、删除功能)。视图View视图负责页面的显示和与用户的交互。在iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewControlle

2021-09-14 17:00:57 163

原创 iOS协议传值

相比于属性传值,协议传值不仅可以向下一页传值,还能在任意界面传值,做到“向上传值”。协议传值有以下几步:1.在子视图.h文件中创建协议,写入属性//创建协议@protocol SubViewControllerDelegate <NSObject>-(void)changeValue:(NSString *)value;@end//写入属性@interface SecondViewController : UIViewController@property (nonatomi

2021-07-26 22:11:44 116

原创 2021暑假第一周总结

本周完成了iOS网易云界面的仿写,遇到了许多问题,也学到了许多东西。一、我的界面在这个界面内,

2021-07-25 16:00:06 146

原创 自定义cell

自定义cell的方法1.在继承于UITableViewCell的.m文件中(如MyTableViewCell.m)重写initWithStyle:reuseIdentifier:方法- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:r

2021-07-20 21:53:42 220

原创 OC学习笔记——深拷贝与浅拷贝

copy与mutableCopycopy在OC中起到复制的作用,是一个通过源对象产生副本对象的过程,OC中可以使用copy或mutableCopy创建一个副本对象。copy创建不可变副本(如NSString、NSArray、NSDictionary)使用时要遵守NSCopying协议,实现copyWithZone:方法@protocol NSCopying- (id)copyWithZone:(NSZone *)zone;@endmutableCopy创建可变副本(如NSMutabl

2021-06-08 23:09:07 457

原创 OC学习笔记——字符串

字符串就是连续的字符序列,OC中有两种字符串:NSString:NSString类是不可变类,一旦被创建,其中的字符序列是不可改变的,直到对象被销毁NSMutableString:NSMutableString是NSString的子类,因此可以调用NSString的所有方法,NSMutableString的对象也可以直接当成NSString对象使用。NSMutableString类的对象是字符序列可变的字符串,NSMutableString类为其对象所代表字符串的修改提供了若干方法。下面介绍有关字

2021-06-03 22:09:54 614

原创 OC学习笔记——协议与委托

什么是协议协议类似于接口,用于定义多个类应遵守的规范。它不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它规定这批类中必须提供某些方法。协议不提供任何实现,让规范和具体的实现分离,使整个项目逻辑更加清晰。协议定义的是多个类的公共行为规范,这些行为是与外部交流的通道,所以协议里通常是一组共用方法,但不提供实现,具体方法的实现将在类中完成。使用类别实现非正式定义在学习类别与扩展时,我们知道类别可以实现非正式定义,这种类别以NSObject为基础,为NSObject创建类别,创建类别的时候就

2021-05-28 22:45:23 256

原创 OC学习笔记——类别与扩展

在开发项目的过程中,有时候需要在已有类上新增新的行为,利用继承可以重写父类方法,还能添加新方法,是一种好的扩展方式。但有的时候,继承并不是最好的选择:如我们希望为NSNumber类新增一些方法,但类别OC的动态特征允许使用类别为现有类添加新方法,不需要创建子类,也不需要访问原有类的源代码。通过使用类别,我们可以动态地为现有类添加新方法,并且可以将类定义模块化地分布到多个相关文件中。定义类别与定义类相似,也由接口部分和实现部分组成。接口部分语法:@interface 已有类(类别名)//方法定

2021-05-28 21:05:35 297

原创 OC学习笔记——包装类

OC的包装类OC是由C语言扩展而来、面向对象的编程语言。C语言中的基本数据类型(char、int、float等)都不是对象,因此没有属性、方法可以被调用。OC提供了NSValue、NSNumber来封装C语言的基本类型,这样就可以让它们具有面向对象的特征。在进行iOS开发时,我们可能会遇到三个类型:NSInteger:相当于longNSUInteger:相当于unsigned longCGFLoat:64位平台相当于double,32位平台相当于float要注意,这三个类并不是包装类!它们依

2021-05-26 17:36:08 139

原创 OC学习笔记——处理对象

OC的包装类OC是由C语言扩展而来、面向对象的编程语言。C语言中的基本数据类型(char、int、float等)都不是对象,因此没有属性、方法可以被调用。OC提供了NSValue、NSNumber来封装C语言的基本类型,这样就可以让它们具有面向对象的特征。在进行iOS开发时,我们可能会遇到三个类型:NSInteger:相当于longNSUInteger:相当于unsigned longCGFLoat:64位平台相当于double,32位平台相当于float要注意,这三个类并不是包装类!它们依

2021-05-26 14:40:49 184

原创 OC学习笔记——多态

OC种指针类型变量有两个:一个是编译时的类型,一个是运行时的类型;编译时的类型由声明该变量时使用的类型决定,运行时使用的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。多态性...

2021-05-25 20:03:51 129

原创 OC学习笔记——类的继承

面向对象的三大特征为封装,多态和继承。OC作为一门面向对象的语言,自然有类的继承。OC继承的特点OC的继承通过父类的语法来实现,实现继承的类被称为子类,被继承的类被称为父类。OC的继承有单继承的特点,每一个子类只能有一个父类,类似于树的结构(一个子结点只能有一个父结点,而一个父结点可以有多个子结点)OC中子类继承父类的语法如下:@interface SubClass : SuperClass { //成员变量定义}//方法定义@end继承关系的本质是一种“由一般到特殊”的关系,子类

2021-05-25 19:38:48 250

原创 新手入门github

关于githubgithub是一个免费,开源的托管平台,不仅可以托管代码,还能托管例如图片、视频甚至小说等一切以文件形式存在的东西。github同时也是一个版本控制系统,在写大型项目时十分便捷,因为它能记录你每次发布到上面的版本,不仅可以记录项目的进程,也能将项目备份到云端,避免本地代码损坏的情况。github还有一个特点,就是可以多人协作,管理同一个项目。通常的做法是建立不同的分支以实现不同的功能,这样显然比每个人在本地实现不同功能、最后再合并效率更高。而且由于每个人都可以看到整个项目的进程,项目的

2021-05-11 16:59:53 1191

空空如也

空空如也

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

TA关注的人

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