E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
iOS-OC
iOS-OC
对象— isa指针分析探究
前言:isa是个很神奇的、很强大的、很低调的角色,她风里来雨里去,在iOS开发的过程中曾经多少次出现在我们的世界里,悄无声息、无怨无悔的为我们提供各种各样的服务!假如你知道NSObject,那么你就一定要知道isa,可以说,她是一个对象的灵魂,如果没有她,一切都将失去了颜色......一、从对象的alloc探索isaPS:友情链接《OC对象原理探究(上)——对象的alloc》《OC对象原理探究(下
一眼万年的星空
·
2024-02-08 05:26
iOS-OC
底层10:dyld加载流程分析
前沿我们实现ViewController的+(void)load方法,在main函数中添加c++方法//ViewController的load方法+(void)load{NSLog(@"%s",__func__);}//程序入口intmain(intargc,char*argv[]){NSString*appDelegateClassName;NSLog(@"1223333");@autorele
MonKey_Money
·
2024-01-30 00:05
iOS-OC
底层21:GCD 函数 和队列
GCD简介1.什么是GCD?全称是GrandCentralDispatch,将任务添加到队列,并且指定执行任务的函数纯C语言,提供了非常多强大的函数.2.GCD的优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码函数任务使
MonKey_Money
·
2024-01-01 03:41
iOS-OC
底层Method-swizzling的那些坑
前言关于Method-swizzling,对于iOS开发者来讲并不陌生,且应用自如。今天我们主要整理一下关于Method-swizzling使用时的一些注意事项,从而避免采坑。开始准备工作:创建ZZPerson类,创建ZZStudent类(继承自ZZPerson),创建ZZStudent+Swizzling.h分类ZZPerson@interfaceZZPerson:NSObject-(void)
泽泽伐木类
·
2023-12-25 04:25
iOS-OC
底层四:类的属性、方法和协议
一、对象、ISA、类、元类、根元类间的关系核心知识点:类声明对象,给对象分配多少内存是依据类,对象的ISA指向类对象在内存中第一个8字节储存的是ISAISA中的shiftClass段就是类,即类为对象的isa&mask类也是一种对象,objc_class继承自objc_object,类的第一个8字节也是ISA,所以万物皆对象,万物皆有isa类的ISA中的shiftClass为元类,即元类为类的is
轰天裂天罗三炮
·
2023-10-07 04:10
iOS-OC
底层-RunLoop
前言RunLoop,又一个面试常常被问到的东西,它是什么?一个运行循环,用来处理App中的各种任务,当有任务的时候,执行任务,没任务的时候进入休眠;每一个线程对应一个Runloop,主线程的RunLoop默认是开启的,子线程的需要手动开启;每一个Runloop下对应多个Modes,每一个Mode下又有多个Items事务.........这些在面试的时候基本上都能答得上来,但我也相信大部分人都只是停
泽泽伐木类
·
2023-08-13 12:30
iOS-OC
底层-AutoReleasePool分析
概念autoreleasepool,即自动释放池。在aotureleasepool中创建的对象,会将对象添加到当前的aotureleasepool中,当自动释放池销毁时,对所有的对象做release操作。那具体是个什么样的操作流程呐?我们开始今天的探索。开始先上一段代码片段:intmain(intargc,constchar*argv[]){@autoreleasepool{//insertcod
泽泽伐木类
·
2023-07-18 15:30
iOS-OC
底层19:内存五大区域
栈由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。栈是向低地址扩展的数据结构,是连续的内存区域,采用后进先出(LIFO)。优缺点:快速高效缺点有限制,数据不灵活[LIFO]iOS主线程栈大小是1MB其他线程是512KBMAC是8M堆由程序员分配和释放,若程序员不释放,程序结束时可能由系统回收。堆是向高地址扩展的数据结构,是不连续的内存区域,以链表的方
MonKey_Money
·
2023-04-11 21:28
iOS-OC
启动优化
应用启动分为冷启动和热启动;冷启动指:在内存中不包含相关数据,必须从磁盘载入到内存中。热启动指:在打开应用程序时,在内存中存在部分程序数据,使得程序数据不用全部载入磁盘。测试app启动分两个阶段,由main函数作为一个分界点,main之前时pre-main,系统反馈。main函数之后是靠自己业务去进行优化,而启动优化,主要解决main函数之前。通过在editscheme中添加环境变量DYLD_PR
大橘猪猪侠
·
2023-04-09 16:05
iOS-OC
、Swift混编之桥接文件
前言:想必大家都有这样的烦恼:用OC开发想导入Swift文件,用Swift开发想导入OC文件,那么有什么办法呢,那好,我们可以利用桥接文件来实现新建一个OC工程,然后创建继续于NSObject的Swift类Snip20180830_41.png这时会提示你是否添加桥接文件,点击创建系统会自动创建一个桥接文件,否则需要自己手动创建新建Swift类手动创建桥接文件首先创建.h名称,名字最好是xxx-B
码渣
·
2023-04-07 04:31
iOS-OC
对象原理_内存布局
前言本文是基于objc-781源码进行分析探索实例对象与类对象底层结构,isa信息分布拓补图.001.jpeg在objc-runtime-new.h中,structobjc_class:objc_object{//ClassISA;Classsuperclass;cache_tcache;//formerlycachepointerandvtableclass_data_bits_tbits;//
泽泽伐木类
·
2023-03-29 08:29
iOS-OC
底层三:ISA的本质
1.前言对象在计算机中的存储是无序的,内存中的一段地址空间,有可能表示A类声明的对象,也可能是B类声明的对象。我们根据一个对象,可以找到对象所在的地址空间,在计算机硬盘中,地址空间存储的是0和1。但是计算机是怎么知道0和1所代表的含义?为什么可以根据对象找到自己的属性和方法,还可以找到父类的属性和方法,这就是isa的作用。我们自定义了一个Person类,没有任何属性和方法,为什么我们可以调用all
轰天裂天罗三炮
·
2023-03-28 21:23
iOS-OC
对象原理_alloc&init
alloc&init探索-(void)viewDidLoad{[superviewDidLoad];//熟悉的入手-对象//alloc做了什么//init做了什么ZZPerson*p1=[ZZPersonalloc];ZZPerson*p2=[p1init];ZZPerson*p3=[p1init];ZZNSLog(@"%@-%p-%p",p1,p1,&p1);ZZNSLog(@"%@-%p-%p
泽泽伐木类
·
2023-03-26 22:01
iOS-OC
底层-block分析
前言block的类型从一段代码开始//全局变量n,namestaticintn=100;staticNSString*name=@"zezefamily";-(void)demo10{//0.没有引用外部变量的testBlock0void(^testBlock0)(BOOLok);testBlock0=^(BOOLok){};NSLog(@"testBlock0==%@",testBlock0);
泽泽伐木类
·
2023-03-21 12:20
iOS-OC
底层一:对象alloc的本质
1.准备源码程序源码分析alloc&init&new的流程,使用从github上下载的LGCooci的源码https://github.com/LGCooci/KCCbjc4_debug。因为设备限制,我是基于818的源码进行学习。从github下载完成后,在KCObjcBuild所在的目录新建一个OC类命名为Person,Person类中什么都不写。在main.m中写入如下代码:#import"
轰天裂天罗三炮
·
2023-03-14 15:22
iOS-内存管理
大致应该分为以下几个方面:NSTaggedPointer类型alloc,retain,release,dealloc,retainCount原理@autoreleasepool原理alloc可以移步我的这篇文章:
iOS-OC
泽泽伐木类
·
2023-01-26 16:45
iOS-OC
底层二 :对象内存对齐
一、内存对齐获取内存大小的三种方式分别是:sizeof:sizeof计算内存大小时,传入的主要对象是数据类型,这个在编译器的编译阶段(即编译时)就会确定大小而不是在运行时确定。最终得到的结果是该数据类型占用空间的大小。class_getInstanceSize:用于获取类的实例对象所占用的内存大小,并返回具体的字节数,其本质就是获取实例对象中成员变量的内存大小malloc_size:这个函数是获取
轰天裂天罗三炮
·
2022-06-02 23:26
iOS-OC
运行时
https://www.jianshu.com/p/c2f382941a0bhttps://blog.csdn.net/u011342466/article/details/50803075方法置换https://blog.csdn.net/u011604049/article/details/54972504
Alan龙马
·
2022-02-10 08:26
iOS-OC
底层08:objc_msgSend慢速查找
前沿在objc_msgSend缓存中读取IMP中,如果缓存没有找到会有下面方法.macroCheckMiss//missifbucket->sel==0.if$0==GETIMPcbzp9,LGetImpMiss.elseif$0==NORMALcbzp9,__objc_msgSend_uncached.elseif$0==LOOKUPcbzp9,__objc_msgLookup_uncached
MonKey_Money
·
2022-02-09 20:33
iOS-OC
底层25:LLVM和自定义LLVM插件
1.概念1.LLVMLLVM是架构编译器(compiler)的框架系统,以c++编写而成,用于优化以任意程序语言编写的程序的编译事件(complie-time),链接时间(link-time),运行时间(run-time),以及空闲时间(idle-time),对开发者保持开放,并兼容以有脚本。LLVM计划启动于2000年,最初由美国UIUC大学的ChrisLattner博士主持开展。2006Chr
MonKey_Money
·
2022-02-08 23:33
iOS-OC
底层15:面试题
1.我们关联的对象是否需要手动移除,为什么不需要手动移除,在对象的dealloc中在关联对象时,如果是第一次,我们会设置对象的has_assoc为true,看dealloc代码-(void)dealloc{_objc_rootDealloc(self);}inlinevoidobjc_object::rootDealloc(){if(isTaggedPointer())return;//fixme
MonKey_Money
·
2022-02-08 17:00
iOS-OC
启动优化:clang插桩实现二进制重排
1.概念1.1.测量Pre-mainTime在工程的scheme中添加环境变量DYLD_PRINT_STATISTICS,看main之前的时间消耗image.png打印日志Totalpre-maintime:1.5seconds(100.0%)dylibloadingtime:313.91milliseconds(20.1%)rebase/bindingtime:123.22millisecond
MonKey_Money
·
2022-02-08 15:43
iOS-OC
底层09:动态方法决议 & 消息转发
前沿我们在oc层面调用对象方法实质是向某对象发送消息也就是objc_msgSend,objc_msgSend需要找到对应方法的实现也就是函数指针IMP,查找IMP首先在缓存中查找也就是快速查找,然后慢速查找也就是在类的方法类表中查找,如果这两种方法都找不到IMP,则在源码中有lookUpImpOrForward,可以看到会走resolveMethod_locked函数也就是动态方法决议动态方法决议
MonKey_Money
·
2022-02-05 13:51
iOS-OC
自动引用计数(内存管理)
前言自动引用计数是指内存管理中对引用采取自动计数的技术。OC中ARC模式是让编译器来替我们实现内存管理,我们无需再像在MRC模式下需要手动键入retain、release来进行内存管理,不但降低了程序的出错概率也减少了程序的书写工作量。这里要提一下的是,拥有ARC这样强大内存管理模式主要依赖于3.0及以上版本的LLVM编译器。内存管理OC内存管理的核心就是引用计数。我们以遛狗的场景为例来解释引用计
JerryLMJ
·
2021-06-23 19:13
iOS-OC
block详解
block的本质的就是一段代码块,也是一个OC对象,它在合适的时间进行调用,它最终继承自NSObject,验证如下:staticintage=10;void(^block)(void)=^(){NSLog(@"这是一个block%d",age);};block();NSLog(@"-------%@--------",[blockclass]);NSLog(@"-------%@--------"
洧中苇_4187
·
2021-06-22 11:39
iOS小项目之第二弹- 别踩白块
iOS-OC
项目别踩白块(Don'tTapTheWhiteTile)写在前面的话①别踩白块游戏简介:《别踩白块儿Don'tTapTheWhiteTile》,这就是这个游戏唯一的一个规则,我们只需要不断踩着黑色方块前进即可
ManoBoo
·
2021-05-18 07:02
iOS-OC
实现LRU算法NSDictionary容器(非线程安全)
1LRU算法LRU(Leastrecentlyused,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。这篇文章对LRU缓存算法做了非常详细的介绍:缓存淘汰算法之LRU-OYK可惜Foundation框架中并未提供一个比较简洁的LRU算法,NSCache没怎么看懂,java中有LruCache。2使用NSDictionary
vinnyxiong
·
2021-04-30 07:30
iOS-OC
底层28:autoreleasepool自动释放池
1.探究autoreleasepool是什么东西1.clang探究autoreleasepool本质intmain(intargc,constchar*argv[]){@autoreleasepool{//insertcodehere...NSLog(@"Hello,World!");}return0;}clang-rewrite-objcmain.m-omain.cppclang之后的代码int
MonKey_Money
·
2020-11-27 09:28
iOS-OC
底层24:Block底层原理
1.Block的类型全局Block(NSGlobalBlock)void(^block)(void)=^{NSLog(@"------");};NSLog(@"%@",block);//打印结果block内部没有引用外部变量的Block类型都是NSGlobalBlock类型,存储于全局数据区,由系统管理其内存,retain、copy、release操作都无效。如果只引用全局变量和静态变量也是全局B
MonKey_Money
·
2020-11-16 17:26
iOS-OC
底层-@synchronized分析
前言锁,在我们的iOS开发中还是经常用到的,特别是在一些多线程的安全访问方面提供了提供了便捷的方案。锁,分为自旋锁,互斥锁,读写锁等类型。在iOS下,我们常见的锁包括:@synchronized,NSLock,dispatch_semphore,NSCondition,NSConditionLock,NSRecursiveLock等。本篇文章我们就重点分析下@synchronized的本质。开始首
泽泽伐木类
·
2020-11-11 15:38
iOS-OC
底层20:iOS多线程
1.多线程概念线程线程是进程的基本执行单元,一个进程的所有任务都在线程中执行进程要想执行任务,必须得有线程,进程至少要有一条线程程序启动会默认开启一条线程,这条线程被称为主线程或UI线程进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内通过“活动监视器”可以查看Mac系统中所开启的进程进程与线程的关系地址空间:同一进程的线程共享本进程的地址
MonKey_Money
·
2020-11-03 09:13
iOS-OC
底层原理_动态方法决议及消息转发
前言在之前的的objc_msgSend()探索中,当调用一个方法后,首先会进入快速查找来匹配sel对应的imp;当没有找到时,会进入慢速查找,开始匹配;当依然无法匹配时,苹果给出了一次转发的机会(动态方法决议)://Noimplementationfound.Trymethodresolveronce.if(slowpath(behavior&LOOKUP_RESOLVER)){behavior^
泽泽伐木类
·
2020-10-15 16:55
iOS-OC
中常见的一些宏
自己常用的一些宏/*1.颜色*/#definePCBRGBColorA(r,g,b,a)[UIColorcolorWithRed:(r)/255.0green:(g)/255.0blue:(b)/255.0alpha:(a)/255.0]//RGBA#definePCBRGBColor(r,g,b)PCBRGBColorA((r),(g),(b),255)//RGB#definePCBRandom
Simple_Code
·
2020-10-09 17:54
iOS-OC
底层03:isa是怎么关联类的
前沿经过看apple的开源源码,了解到共同体(isa_t)和位域(ISA_BITFIELD)在底层起到至关重要的作用。首先先对用到的位域和共同体简单回顾。共同体共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。unionData{intI;floatf;charst
MonKey_Money
·
2020-09-16 14:47
iOS-OC
底层02:结构体和嵌套结构体和类内存对齐
前沿我们要想知道结构体内存对齐,要先知道每个结构体的成员所占有的字节数。COC32位64位boolBool(64位)11signedchar(__signedchar)int8_t,Bool(32位)11unsignedcharBoolean11shortint16_t22unsignedshortunichar22intint32_tNSInteger(32位),boolean_t(32位)44
MonKey_Money
·
2020-09-16 14:18
黑马程序员-
IOS-OC
基础-面向对象语法一
--------------------------------------android培训、java培训、ios培训期待与您交流!---------------------------------面向对象的思想1,OC语言是面向对象的,C语言是面向过程的。面向对象和面向过程只是解决问题的两种不同的思想。其实面向对象的思想就是指挥对象做事情,你自己不需要知道知道过程,只要知道结果就行了。两者的区
靠谱的走了
·
2020-09-16 12:36
基础篇
黑马程序员-
IOS-OC
基础-面向对象语法
--------------------------------------android培训、java培训、ios培训期待与您交流!---------------------------------面向对象和面向过程思想1、OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想1.面向对象和面向过程的区别1)以用电脑听歌为例子a)面向过程*打开电脑*播放电脑中的歌曲*关闭
有馒头吗
·
2020-09-16 12:18
iOS-OC
底层04:类结构分析
类结构分析通过lldb来分析类结构LGPerson*objc2=[LGPersonalloc];查看objc2的内存情况(lldb)x/4gxobjc2//查看objc2的内存情况0x1006477b0:0x001d8001000021b50x00000001000010100x1006477c0:0x50626154534e5b2d0x65695672656b6369(lldb)p/xobjc2
MonKey_Money
·
2020-09-14 10:22
iOS-OC
基础-起源
关于Objective-CObjective-C是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSIC编程语言,将Smalltalk式的消息传递机制加入到ANSIC中。目前主要支持的编译器有GCC和Clang。历史Objective-C主要由Stepstone公司的BradCox和TomLove在19世纪80年代发明。1981年BradCox和TomLove还在ITT公司技术中心任职时,接
icewst
·
2020-09-13 19:56
iOS
iOS-OC
对象原理_NONPOINTER_ISA
前言在前面的文章中我们探索了在iOS中alloc执行流程,在流程中最后的_class_createInstanceFromZone()方法中,主要执行如下:size=cls->instanceSize(extraBytes);确认要开辟的空间大小obj=(id)calloc(1,size);开辟空间obj->initInstanceIsa(cls,hasCxxDtor);建立cls与isa的绑定。
泽泽伐木类
·
2020-09-10 15:47
iOS-OC
底层01:alloc init到底做了什么
OC对象简单案例来开启我们的探索之旅MyPerson*p1=[MyPersonalloc];MyPerson*p2=[p1init];MyPerson*p3=[p1init];LGNSLog(@"%@-%p-%p",p1,p1,&p1);LGNSLog(@"%@-%p-%p",p2,p2,&p2);LGNSLog(@"%@-%p-%p",p3,p3,&p3);打印结果-0x600001d86230
MonKey_Money
·
2020-09-08 16:54
iOS开发常用宏定义
iOS日常工作之常用宏定义大全
iOS-OC
中常见的一些宏YYCategories目录1、长、宽、高2、判断设备、系统版本3、dispatch_main_async_safe4、WeakSelf、StrongSelf5
lionsom_lin
·
2020-08-24 05:26
iOS-OC
对象模型
iOS-OC
对象模型OC的对象内存模型是什么样了?XCode的实现并没有给我们提示它的具体实现。猜想,和通过资料查阅,对其实现进行大胆的假设,提高coding的编程思想,和程序框架的设计能力。
___凡凡
·
2020-08-07 11:42
OC对象内存模型
iOS-OC
加载HTML字符串
最近项目里面遇见了HTML字符串,整理如下:后台返回字符串的样式在iOS中通常加载HTML字符串有两种方式通过UILabel加载富文本的方法加载HTML字符串通过WebView加载HTML字符串-(void)viewDidLoad{[superviewDidLoad];1.UILabel加载HTML字符串NSString*str1=@"Google(中文名:谷歌),是一家美国的跨国科技企业。Goo
命运建筑师fly
·
2020-07-11 18:57
iOS-OC
中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html52.设置控制器为webView的代理,遵守协议3.实现代理方法webViewDidFinishLoad:4.在代理方法中进行操作HTML5中的标签(CRUD-->增删改查)1.用类选择器或者id选择器或者标签选择器等选择要进行操作的标签2.把选择好的标签转换成字符串3.webView调用stringByEvaluatingJavaSc
船长_
·
2020-07-10 22:58
IOS-OC
时间戳转化为时间
做打车项目用到时间戳了所以就百度了一下很简单NSString*str=dic[@"start_time"];NSTimeIntervaltime=[strdoubleValue];NSDate*detaildate=[NSDatedateWithTimeIntervalSince1970:time];NSDateFormatter*dateFormatter=[[NSDateFormatteral
蜗牛快跑zzz
·
2020-07-07 18:54
iOS-OC
为什么需要重写setter或getter方法?
打个比方:一个person类中有一个属性age,那么如果用property声明后,set跟get方法仅仅只是做一个_age=age.但是你想想如果你在person类中new一个对象p,那么我可不可以写成psetAge=-10?一个人的年龄肯定不会有-10岁,如果重写set方法你就可以在set方法中写成if(age<=0){age=1;}也就是说当你给age赋值小于或等于0的时候,age会自动变成1
jialiOS
·
2020-07-02 05:43
OC
iOS-OC
为什么需要重写setter或getter方法?
打个比方:一个person类中有一个属性age,那么如果用property声明后,set跟get方法仅仅只是做一个_age=age.但是你想想如果你在person类中new一个对象p,那么我可不可以写成psetAge=-10?一个人的年龄肯定不会有-10岁,如果重写set方法你就可以在set方法中写成if(age<=0){age=1;}也就是说当你给age赋值小于或等于0的时候,age会自动变成1
大荣纸
·
2020-07-01 23:29
iOS-OC
版本更新/检查更新
自己挖的坑自己要填上...iOS是只能自动提醒更新,界面上不能有按钮提供给用户手动更新的,自己失误在设置里面的版本号添加了点击手势来判断是否有新版本,然后就被拒了,所以要去掉手动更新的入口,只保留app启动或者首页的自动检查更新。之前尝试过使用http://itunes.apple.com/lookup?id=应用ID来做搜索,但是不管用,上网查了之后使用https://itunes.apple.
iOS苦逼开发
·
2020-06-30 12:32
iOS-OC
runtime - objc_msgSend( )详解与应用
本文主要从源码层面梳理消息发送的整个流程,内容包括1.消息发送,2.动态方法解析,3.消息转发文中涉及的代码我会标记行号和方法名,便于读者自行验证,我使用的runtime源码版本是objc4-779.1,不同版本行号可能出现差异.1>文件名objc-msg-arms.s,可以看到,它是由汇编编写的,这样运行效率更高,ENTRY代表方法的入口,消息发送从ENTRY_objc_msgSend这里开始执
洧中苇_4187
·
2020-05-09 16:05
上一页
1
2
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他