一、引用 引用是iOS内存管理中的重要知识点,总所周知,iOS对象的内存管理是使用引用计数来表示的。一个对象只有在它的所有强引用都被释放后才能被回收。因此,一个对象的生命周期取决于其强引用的所有者。...您可能想要引用一个对象而不妨碍对象本身的回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象的指针创建的,而不是保留对象。...强引用(持有对象Retain):当前对象被其他对象引用时,会执行retain操作,引用计数器+1。...二、循环引用 对象 A 和对象 B,相互引用了对方作为自己的成员变量,只有当自己销毁时,才会将成员变量的引用计数减 1。...因为对象 A 的销毁依赖于对象 B 销毁,而对象 B 的销毁与依赖于对象 A 的销毁,这样就造成了我们称之为循环引用(Reference Cycle)。
目录: 1.这就是Objective-C对象模型吗?...2.Objective-C对象结构 3.Meta Class(元类) 4.代码验证 5.推荐文章 1.这就是Objective-C对象模型吗? ?...2.Objective-C对象结构 下面的代码在objc/obj.h和objc/Object.h /// An opaque type that represents an Objective-C class...如果结构体中第一个变量的类型是Class,就可以当作是Objetive-C对象。之后讲block的实质的时候就会看到其本质就是Objective-C对象。...[ Objective-C对象结构图 ] 从这张图上,我们来做一个总结: 对象的isa指向了一个类对象(ClassObject)。
NSSortDescriptor可以根据数组中对象的属性来排序 为排序数组的每个属性创建NSSortDescriptor对象,将所有这些对象放入一个数组中,该数组将会在后面用作参数。...使用NSArray类的sortedArrayUsingDescripors:方法并将NSSortDescriptor对象数组作为参数传递过去,会返回一个排好序的数组 新建一个Peron类 #import...NSArray *personArr = @[p1,p2,p3,p4,p5]; // 为每个属性创建NSSortDescriptor对象
每种OOP的语言在面向对象上或多或少都会有不同的地方,现在在学习OC的面向对象部分,又感觉到OC面向对象的特点。写篇博文总结一下OC中的面向对象。...面向对象程序开发的主要目标:用代码模拟现实中的对象,将现实中对象的某些行为能力,特征用代码表现出来,然后用这些代码来模拟现实中的问题。 ...对象是类的实体,类是对象的抽象,因此需要对类进行实例化。 ...给对象的成员变量赋值和调用对象的方法如下: 对象名->成员变量名 = 具体值; [ 对象名 方法名]; 一:类方法和对象方法...对象方法允许调用对象方法和对象变量加号开头的方法为类方法,通过类就可以直接调用的方法。
通过分析对象的本质得知实例对象的isa指向类对象,那类对象的isa呢,我们接下来就对 isa 的流程进行分析。...总结如下: 实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向根元类对象,根元类对象的isa指向的是自己本身。...三、类对象,元类对象,根元类对象的继承链 类对象,元类对象,根元类对象是否也有继承链呢?如果有,是怎么样的一个继承链呢?添加一个继承至SHPerson的SHStudent类。...从图得知: 子类的类对象的父类,是父类的类对象,父类的类对象的父类,是根类的类对象,根类的类对象为nil。...子类的元类对象的父类,是父类的元类对象,父类的元类对象的父类,是根类的元类对象,根类的元类对象的父类,是根类的类对象。 结合下面的一张很经典的图,就更清楚了。
与之对应实现的就是Objective-C的Runtime机制。 Objective-C的Runtime目前有两个版本:Leagcy Runtime和Moden Runtime。...同时,在Objective-C语言中,类本身也是一个对象,类作为对象时isa指针指向元类(Meta Class),后面会详解; super_class:指向该类的父类,如果该类已经是根类(NSObject.../// A pointer to an instance of a class. typedef struct objc_object *id; 相关函数 Objective-C的Runtime我们提供了很多运行时状态跟类与对象相关的函数...( id obj ); // 设置对象的类 Class object_setClass ( id obj, Class cls ); 获取类定义 Objective-C动态运行库会自动注册我们代码中定义的所有的类...小结 本文着重讲解了在Runtime时类与对象相关方法和数据结构,通过这些讲解可以让大家对Objective-C底层类与对象实现有大致的了解,并且可以为大家平常编程过程提供一些思路上的启发。
消息传递(Messaging): 在对象之间传递数据并执行任务的过程 Objective-C基于C语言加入了面向对象特性和消息转发机制的动态语言。...不同语言有不同函数传递方法,C语言 - 函数指针,C++ - 函数调用(引用)类成员函数在编译时候就确定了其所属类别, Objective-C 通过选择器和block。...Objective-C强调消息传递而非方法调用。 能够向一个对象传递消息,且不须要再编译期声明这些消息的处理方法。 这些方法在执行时才确定。执行时(runtime)详细功能将在以下介绍。...##Objective-C程序生成目标文件里的执行时信息怎样获取?...2.0 Objective-C的对象模型与执行时 深入理解Objective-C的Runtime机制 Objective-C的动态特性 发布者:全栈程序员栈长,转载请注明出处:https:
如果一个对象的类采用了NSCopying协议并且实现了它的copyWithZone:方法,那么这个对象就可以被拷贝。...深拷贝复制所引用的对象,而浅拷贝仅复制对这些对象的引用。 因此,如果对象A被浅拷贝到对象B,则对象B引用对象A引用的同一个实例变量(或属性)。 深拷贝对象比浅拷贝更受欢迎,尤其是对于值对象。...三、值对象的深拷贝,浅拷贝 在值对象对象(NSString, NSNumber,NSData, NSDate,NSvalue)中:对immutable对象进行copy操作,是指针复制(浅复制),mutableCopy...的集合对象是已经进行了深拷贝,但是集合里的每个对象都是进行的浅拷贝。...但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制(浅复制)。
什么是Objective-C Objective-C,简称OC,是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言, 将Smalltalk式的消息传递机制加入到ANSI C中。...Objective-C里,与其说对象互相调用方法, 不如说对象之间互相传递消息更为精确。此二种风格的主要差异在于调用方法/消息传递这个动作。...Objective-C天生即具备鸭子类型之动态绑定能力, 因为运行期才处理消息,允许发送未知消息给对象。可以送消息给整个对象集合而不需要一一检查每个对象的类型, 也具备消息转送机制。...实例化 实例化即创建对象。Objective-C创建对象需通过alloc以及init两个消息。alloc的作用是分配内存, init则是初始化对象。...发送给对象的所有消息都会动态分发,这样有利于实现Objective-C类的多态行为。
Objective-C语言的动态性主要体现在以下3个方面 (1)动态类型:运行时确定对象的类型。 (2)动态绑定:运行时确定对象的方法。 ...一、动态类型 动态类型指对象指针类型的动态性,具体地说就是使用id类型将对象的类型推迟到运行时才确定,由赋给它的对象类型决定该对象类型(说起来怎么这么绕口),也就是说id修饰的对象是动态类型对象,其他在编译期指明类型的为静态类型对象...四、消息传递机制 在OC中,方法的调用不能再去理解为对象调用其方法,而是要理解成对象接收消息。消息的发送采用“动态绑定”的机制,具体会调用那个方法直到运行时才确定。...方法的调用其实就是告诉对象要做些什么事,给对象发送一个消息,对象为就是接收者recevier,调用的方法及其参数就是消息message,如果要给一个对象传递消息,可以表示为:[receiver message...(就是将消息发送到另一个对象去处理) -(id)forwardingTargetForSelector:(SEL)aSelector (3)手动生成签名并转发给另外一个对象 -(NSMethodSignature
从class-dump下载地址将dmg文件下载下来,将class-dump复制到/usr/bin目录,并在终端执行下面命令赋予权限
前言 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...而OS X较老的32位程序仍采用 Objective-C 1中的(早期)Legacy 版本的 Runtime 系统。...Objective-C源代码 大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。...在Objective-C Runtime Reference中有对 Runtime 函数的详细文档。...2.0的遗留逻辑,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C
直接遍历数组,取符合条件的对象放到一个新数组效率可能不高。...下面介绍一个更简便的方法来实现 简介 NSPredicate类主要用来指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。...主要用于从集合中分拣出符合条件的对象或者数据模型,也可以用于字符串的正则匹配....Extended #import @interface NSMutableArray (Extended) /** 数组筛选属性为Int类型的对象...@param key 对象对应的属性字段 @param value 对象对应的值 @return 筛选后的数组 */ -(NSMutableArray*)getArrayWithString
Objective-C Runtime 最近在学习Runtime的知识,恰巧发现了这篇博客《Objective-C Runtime》,在此基础上,进行了些许补充说明,如有错误或其他想法,欢迎提出交流。...2.0的遗留逻辑,但我们仍能从中获得一些有价值的信息,有兴趣的可以查看源代码 Objective-C 2.0 的头文件虽然没暴露出objc_class结构体更详细的设计,我们依然可以从Objective-C...Objective-C 的类方法 是使用元类的根本原因,在其他方面试图在隐藏元类。...参考链接 原文:Objective-C Runtime Apple官方文档:Objective-C Runtime Programming Guide Apple开源代码:Objective-C Runtime...源码 Objective-C runtime之运行时的基本特点 Understanding the Objective-C Runtime 最后,附上Runtime的基本使用:《Objective-C
The isa pointer of Instance and Class Firstly, let's have a look at the struct o...
Objective-C的Runtime,是一个用C和汇编写的「开源库」,它为C添加了面向对象的特性,从而成就了Objrctive-C这门语言。...简单点理解,Runtime就是一个C和汇编写的代码库——是Objective-C之所以成为Objective-C的一个库。 用一图以助理解: ?...名词解释 isa isa是一个指针,隐式地存在于实例对象、类中,对象的isa指针指向所属类——因此实例对象能知道自己属于哪个类;类的isa指针指向一个叫「元类(Meta Class))」的玩意儿。...解读一下部分成员: isa指针 上面介绍isa的时候,说过类也有一个isa指针,我们可以理解为:类本身也是一个对象——「类对象」。...; 表示Objective-C中的属性。
float、char… OC自身定义的数据类型,都包含在Foundation中了,类名以NS开头,比如:NSArray、NSInteger、NSNumber,定义:NSString *myStr; 更多关于Objective-C...的学习资料,推荐 Ry’s Objective-C Tutorial
处理两个对象时,==操作符表示测试两个不同指针是否指向同一个对象; 如果要测试两个对象是否含有同样的值,应当使用 isEqual方法。...objc_setAssociatedObject NSArray和NSDictionary只可以用来收集OC对象,其它对象必须封装在OC对象之内才可以init到上述类型之中。...意思是当你在运行时创建一个实例时,你会得到一个具体的子类来存储提供的值,就当那个对象是NSNumber的子类就好。...在sort的时候: a) NSArray类型由于是不可变,所以调用sort方法会返回一个新的array对象。...如果你打算add或者remove一个对象,会导致一个运行时异常。
因为 一个id可以是任何类型的对象类,由于存在一个名为-count的方法在一些类中, 编译器可能返回一个+factoryMehtodB的实现的方法。...@property (readonly, getter=isBlue) BOOL blue; >属性持有着一个对象的状态。他们反映对象的本质属性和其他对象的关系。...##Automatic Reference Counting (ARC) 自动引用计数(ARC)是一个编译器特性,它提供了Objective-C对象的自动内存管理。...ARC评估对象的生命周期需求并自动插入适当的内存管理要求在编译时间。编译器也会为你产生适当的dealloc方法。...使用modern Objective-C converter,Edit > Refactor > Convert to Modern Objective-C Syntax.
所以,RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面 Event Loop 的逻辑。...OSX/iOS 系统中,提供了两个这样的对象:NSRunLoop 和 CFRunLoopRef。...IOKit 层是为设备驱动提供了一个面向对象(C++)的一个框架。...在 Mach 中,所有的东西都是通过自己的对象实现的,进程、线程和虚拟内存都被称为"对象"。和其他架构不同, Mach 的对象间不能直接调用,只能通过消息传递的方式实现对象间的通信。"...UI对象操作通常包括 UIView/CALayer 等 UI 对象的创建、设置属性和销毁。
领取专属 10元无门槛券
手把手带您无忧上云