
IOS开发
文章平均质量分 67
CJL爱吃鱼
鹅厂菜鸟
展开
-
Objective-c runtime之消息转发机制
我们使用某个实例对象调用该对象所属类的某个方法:[receiver message];以前:receiver调用了message方法。OC:message这个方法向receiver发送了消息。OC方法调用会转化为C语言方法调用:转化为:objc_msgSend(id receiver , SEL selector , …);1、会根据receiver和selector一起来确定方法的实现体,即IMP2、会传递相关的信息给IMPid (*IMP)(id receiver, SEL,原创 2021-03-20 00:20:10 · 323 阅读 · 0 评论 -
runtime之SEL与IMP
SEL首先,SEL是一个选择器,我们来看看SEL在runtime中的定义:/// An opaque type that represents a method selector.typedef struct objc_selector *SEL;可见SEL是一个指向objc_selector结构体的指针。那么selector有什么用呢,当我们执行方法调用的时候,OC会根据selector来执行对应的方法。但是,两个类之间,不管他们有没有关系,只要他们类中的方法名一样,那么他们的SEL是同一个原创 2021-03-18 14:45:29 · 282 阅读 · 0 评论 -
runtime之成员变量
在OC中,成员变量就是一个结构体,如下: struct objc_ivar{ char * ivar_name; char *ivar_type; int ivar_offset; }这个结构体描述了成员变量的名字,类型和偏移量。同时runtime也为我们提供了相应的函数来获取类的成员变量的信息。Ivar _Nonnull * _Nullableclass_copyIvarList(Class _Nullable cls, unsigned int * _Nullable outC原创 2021-03-16 23:42:38 · 197 阅读 · 0 评论 -
runtime之metaClass
网络上有一张经典的图,如下:这张图的大概意思就是:实例对象的isa指针指向其类,该类的isa指针指向其元类(MetaClass),而其元类的isa指针指向NSObject的元类,而NSObject的元类的isa指针指向自己。下面通过代码来证明一下正确性: NSObject *obj = [[NSObject alloc] init ]; //实例化一个NSObject对象 Class objClass = [obj class]; //获取该实例对应的类原创 2021-03-15 23:33:45 · 110 阅读 · 0 评论 -
IOS开发之App启动图的展示
现在我们打开App,几乎绝大多数App都会在进入主页之前有一个启动图的展示,基本上都是一些广告,App背后的公司通过App启动页面展示广告来赚取广告费用。比如我打开微博,微博App的启动页面有化妆品的广告。那么今天要实现的功能就是如何给App添加启动页面,并且在启动页面实现一些自定义的逻辑。这里有三种方法实现启动图的闪屏逻辑。第一种:Launch Screen + Splash Screen这是系统级的闪屏逻辑,实现非常简单,但是时间段,App的加载资源准备好后就会立即消失。第二种方法:As原创 2021-03-04 14:18:31 · 430 阅读 · 1 评论 -
IOS开发之App之间的拉起和跳转
我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:那么IOS是如何实现App之间的跳转呢?今天就来学习一下。URL Scheme:IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。其拉起的格式如下:比如我们想拉起微信,可以在浏览器页面输入:weixin://就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。接下来我就演示一下如何在Safari浏览器原创 2021-03-04 13:40:36 · 3258 阅读 · 1 评论 -
使用SDWebImage开源框架实现图片的下载与存储
之前我们已经在多线程基础中,通过把图片的网络请求放到非主线程中,来优化了整个app的卡顿情况。但是,这并不是最优解,因为当我们滑动页面的时候,图片并没有被保存下来,每次显示相同的图片,仍然要从网络中请求并加载。进一步的优化是应该把初次请求的图片保存在缓存中,下一次显示的时候直接从缓存中读取,由于读取缓存的速度肯定大大小于网络请求的速度,所以通过把图片存储下来,可以进一步优化app的流畅性。接下来我们就介绍下在ios开发中图片存储的方案和流程。同样的,这里我们介绍一个开源框架–SDWebImage来实现图原创 2021-02-08 20:36:59 · 734 阅读 · 0 评论 -
IOS开发之多线程基础(NSThiread、GCD、NSOperation、Runloop)
IOS中的进程和线程通长来说一个app就是一个进程ios开发中较少的运用进程间的通信(XPC),绝大多数使用线程。在ios开发中,为了保证流畅性以及线程安全,所有与UI相关的操作都应该放在主线程,所以有时候主线程也叫UI线程。影响UI体验,耗时时间较长的操作,尽量放到非主线程中。比如网络请求以及和本地的IO操作。在IOS开发中有关于多线程的知识点主要包括:NSThread、GCD、NSOperation和RunloopNSThreadNSthread就是一个线程,它的底层是对pthread的封原创 2021-02-04 22:08:21 · 299 阅读 · 0 评论 -
IOS文件管理系统:沙盒、NSFileManager、NSFileHandle、NSCoding、NSKeyedArchiver解析
什么是沙盒?苹果为我们每个app都分配了一个固定的文件夹,我们在开发过程中可以向文件夹存入我们想要存储的数据,同时也能从这些文件夹取这些数据,但是我们不能取到其他app所存储的数据。简单说,沙盒就是这个文件夹。沙盒是苹果的一种安全机制的设计,就是一个app只能访问该app对应的文件夹,以及一些相关的资源,两个app之间是不能共享文件的。每个app只能访问自己沙盒中的文件的。而沙盒就是一个存储app资源的地方。它主要包括bundles文件和Datas文件。而bundles文件主要是系统来管理的,我们开发a原创 2021-01-31 17:49:25 · 468 阅读 · 0 评论 -
使用cocoapods集成AFNetworking开源框架
什么是AFNetworking?AFNetworking是一款用于网络通信的开源框架。在使用cocoa提供的NSURL实现app的网络请求的时候,当我们的请求特别复杂,逻辑也特别复杂的时候,会使代码量骤增,重复代码特别多,AFNetworking就解决了这种代码使用不优雅的问题。它通过非常简单的接口和回调,让我们使用者在开发网络请求方面的工作时非常方便。使用系统的第三方资源库带来了一个问题,就是如何管理和依赖AFNetworking?在介绍后续内容之前,我们需要先了解两个概念,一个是project,一原创 2021-01-28 22:06:51 · 470 阅读 · 0 评论 -
IOS开发之代码规范与重构
最近学习到了ios开发的一些代码规范技巧,在此记录一下。一、Rename对当前文件夹下某个文件名进行重命名二、注释:Option + Command + ‘/’ , 添加注释三、#pragma mark -对于较长的代码,可以使用#pragma mark -进行分组四、command + F进行查找操作,然后使用replace进行替换。五、使用new Group进行文件结构设置六、XCFormatXcode的一个小插件,一个自定义代码规范。点击Xcode Extensions进原创 2021-01-18 13:39:31 · 294 阅读 · 0 评论 -
IOS开发之1:Xcode11之后didFinishLaunchingWithOptions函数初始化window失败问题
IOS开发之1:Xcode11之后didFinishLaunchingWithOptions函数初始化window失败问题刚刚开始学习IOS开发相关的知识,由于秋招公司用的是OC开发的,所以学习书籍都很老了。OC学了两个月,把语法学的差不多了。最近开始写IOSapp,跟着书和视频写,发觉有个BUG让我抓狂了好久。问题如题目,跟着书在appdelegate.m文件didFinishLaunchingWithOptions函数中初始化window界面,书里面运行正常,视频教程运行正常,可我的Xcode里死活原创 2020-12-24 15:43:34 · 1111 阅读 · 0 评论