联合体(union) 构造数据类型的方式有以下两种: 结构体(struct) 联合体(union,也称为共用体)结构体结构体是指把不同的数据组合成一个整体,其变量是共存的,变量不管是否使用,都会分配内存。缺点:所有属性都分配内存,比较浪费内存,假设有4个int成员,一共分配了16字节的内存,但是在使用时,你只使用了4字节,剩余的12字节就是属于内存的浪费优点:存储容量较大,包容性强,且成
转载 2024-01-28 00:48:29
120阅读
一、什么是关联对象1.关联对象的概念:associatedObject又称关联对象,把一个对象关联到另外一个对象身上,使两者能够产生联系,我们可以通过associatedObject来给分类扩展属性。在iOS开发中,使用associatedObject之前,必须导入<objc/runtime.h>的头文件。2.关联对象的常用方法:​//关联对象 void objc_
原创 2023-02-06 14:44:36
144阅读
1点赞
在很多三方库和平时的代码编写中,经常会使用到关联对象,在 OC 中,一般是在类的分类(Category)中添加关联属性,在 swift 中,一般是在扩展(extension)中添加,当然你也可以在其他地方进行关联属性操作。分类中使用属性,只会做方法的声明。这是因为分类不能直接添加成员变量(可以查看分类的底层结构,并没有设计存放成员变量),但是可以使用关联对象间接达到调用效果。笔者在看这块知识之前,
转载 2023-07-13 13:46:47
52阅读
前言associatedObject又称关联对象。顾名思义,就是把一个对象关联到另外一个对象身上。使两者能够产生联系。目前我能想到的关联对象的使用场景有如下几点:运行时给cagetory添加getter和setter。因为category中添加的property不会生成带下划线"_"的成员变量以及getter和setter的实现。所以可以通过关联对象实现getter和setter。有时需要在对象
关联对象常见的一种做法在分类里想增加属性,由于只会生成 set get方法,并不会存在 属性与成员这个时候的做法往往是 在set 里 调用objc_setAssociatedObjectget里使用 objc_getAssociatedObject那么 关联对象究竟如何实现,这是本次探究的主题找源码出现了两个关键变量关于 DisguisedPtr<objc_object> ,顺便了解一
# iOS 关联对象的使用指南 在iOS开发中,关联对象是一种非常强大的特性,它允许开发者在运行时为现有类添加属性,而不需要修改其源代码。这对于借助分类扩展功能非常有用。本文将分步骤介绍如何在iOS中使用关联对象,适合刚入行的开发者学习。 ## 流程概述 以下是使用关联对象的基本步骤: | 步骤 | 描述
原创 2024-10-17 13:59:26
37阅读
面试题问: Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以通过runtime的方式间接实现添加成员变量的效果。RunTime为Category动态关联对象使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系。我们通过之前的学习知道,对象一开始初始化的时候其属性为nil,给属性赋值其实就是让属性指向一块存储内容的内存,
iOS开发中,我们经常使用到category,使用category可以给类添加方法或者属性,在添加属性的时候,如果仅仅声明属性,编译器并不会自动生成set和get方法,此时直接使用属性进行读写会发生crash,此时需要通过关联对象来增加属性的set和get方法实现。关联对象的使用先创建一个类名称为Custom,并且增加category命名为Prop,写入代码Custom.h#import &lt
前言在iOS开发过程中,会经常使用到一个修饰词“weak”,使用场景大家都比较清晰,用于一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 nil。weak底层原理1.weak编译解析首先需要看一下weak编译之后具体出现什么样的变化,通过Clang的方法把weak编译成C++
转载 2023-07-25 17:37:47
112阅读
在开始阅读本篇博客之前,建议先去看看我的上一篇博客iOS底层探索之对象的本质和类的关联特性initIsa(上) 本篇内容主要讲下OC当中类的关联相关的initIsa1.initIsa结构从苹果开源的objc底层源码可以看到OC底层是通过initIsa和cls类进行关联的//关联对象 if (!zone && fast) { obj->initInst
# iOS 关联对象存放位置的实现指南 ## 1. 引言 在iOS开发中,关联对象(Associated Objects)使我们能够动态地将属性添加到现有的类中,而无需直接修改类的源代码。这对分类(Category)特别有用。本文将详细介绍如何在iOS中实现关联对象的存放位置,包括每一步的代码和解释。 ## 2. 流程概述 下面的表格展示了实现关联对象存放位置的整个流程: | 步骤 |
原创 9月前
19阅读
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以正常
关联关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。在类的定义之外为类增加额外的存储空间使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键
什么是RuntimeOC语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。运行时系统就像一个操作系统一样:它让所有的工作可以正常的运行。这个运行时系统即Objc Runtime。Objc Runtime基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。Runtime其实有两个版本: “modern” 和 “legacy”。我们现在用的 Objecti
转载 2023-07-25 10:25:32
139阅读
runTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时
runtime,运行时。 就是说程序运行的时候可以进行操作,如调用新函数、删除已有的函数、改变变量的值等。runtime就是实现语言动态的api 1.类的动态改变 2.消息传递 一个类的内部定义如下struct objc_class { Class isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ Class super_clas
转载 2023-07-13 15:26:53
64阅读
        Runtime (运行时),是一套纯C的API。是OC的运行机制。最主要的是消息机制。OC调用函数的本质就是消息发送,是动态的调用过程。只有在真正的运行的时候才会跟具函数的名称找到对应的函数调用。       消息机制的原理:对象根据方法编号SEL去映射表找到对应的方法实现。 &nb
转载 2023-09-13 14:50:32
109阅读
简介Objective-C是一门古老的语言,但是是一门动态性的语言,因为它的动态性,使其又有了强大的生命力,在苹果生态系统的平台应用广泛,可谓互相成全了对方,Objective-C的动态性随处可见,当子类覆写父类方法的时候,总是在执行前才决定该执行什么,不像C在编译时就已经决定了代码的执行,能让Objective-C有强大动态性的就是Runtime类库。原理Runtime的核心就是消息转发,当对象
转载 2023-07-23 23:12:01
90阅读
一、Runtime简介    因为Objective-C是一门动态语言,所以它总是想办法把一些决定性工作从编译链接推迟到运行时,也就是说只有编译器是不够的,还需要一个运行时系统(runtime system)来执行编译后的代码。这就是Objective-C Runtime系统存在的意义,它是整个Objective-C运行框架的一块基石。  &nbs
转载 2023-07-24 15:48:24
139阅读
这段时间在公司要做一个组件开发,需要用到OC Runtime特性的地方很多,于是在以前的了解上又恶补了一下相关知识,以下是自己的一些总结。如果有不对的地方,欢迎大家及时指出.一、Runtime 是什么?Runtime机制是Objective-C的一个重要特性,是其区别于C语言这种静态语言的根本,C语言的函数调用会在编译期确定好,在编译完成后直接顺序执行。而OC是一门动态语言,函数调用变成了消息发送
  • 1
  • 2
  • 3
  • 4
  • 5