# iOS 关联对象的使用指南
在iOS开发中,关联对象是一种非常强大的特性,它允许开发者在运行时为现有类添加属性,而不需要修改其源代码。这对于借助分类扩展功能非常有用。本文将分步骤介绍如何在iOS中使用关联对象,适合刚入行的开发者学习。
## 流程概述
以下是使用关联对象的基本步骤:
| 步骤 | 描述
原创
2024-10-17 13:59:26
37阅读
在很多三方库和平时的代码编写中,经常会使用到关联对象,在 OC 中,一般是在类的分类(Category)中添加关联属性,在 swift 中,一般是在扩展(extension)中添加,当然你也可以在其他地方进行关联属性操作。分类中使用属性,只会做方法的声明。这是因为分类不能直接添加成员变量(可以查看分类的底层结构,并没有设计存放成员变量),但是可以使用关联对象间接达到调用效果。笔者在看这块知识之前,
转载
2023-07-13 13:46:47
52阅读
联合体(union) 构造数据类型的方式有以下两种:
结构体(struct)
联合体(union,也称为共用体)结构体结构体是指把不同的数据组合成一个整体,其变量是共存的,变量不管是否使用,都会分配内存。缺点:所有属性都分配内存,比较浪费内存,假设有4个int成员,一共分配了16字节的内存,但是在使用时,你只使用了4字节,剩余的12字节就是属于内存的浪费优点:存储容量较大,包容性强,且成
转载
2024-01-28 00:48:29
120阅读
iOS 运行时之 Associative(关联) iOS 下有很多运行时特性,这里介绍一下 Associative(关联) 这个运行时特性,以及它一些使用场景。 Associative 意思为关联, iOS 下有很多运行时特性,这里介绍一下 Associative(关联)这个运行时特性,以及它一些使用场景。 Associative意思为关联,能够将两个对象建立一种关系。这种关系是一种 从属关系,也
转载
2023-10-07 15:29:32
311阅读
前言associatedObject又称关联对象。顾名思义,就是把一个对象关联到另外一个对象身上。使两者能够产生联系。目前我能想到的关联对象的使用场景有如下几点:运行时给cagetory添加getter和setter。因为category中添加的property不会生成带下划线"_"的成员变量以及getter和setter的实现。所以可以通过关联对象实现getter和setter。有时需要在对象中
转载
2023-09-13 14:38:33
81阅读
关联对象常见的一种做法在分类里想增加属性,由于只会生成 set get方法,并不会存在 属性与成员这个时候的做法往往是 在set 里 调用objc_setAssociatedObjectget里使用 objc_getAssociatedObject那么 关联对象究竟如何实现,这是本次探究的主题找源码出现了两个关键变量关于 DisguisedPtr<objc_object> ,顺便了解一
转载
2023-07-25 14:18:15
55阅读
面试题问: Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以通过runtime的方式间接实现添加成员变量的效果。RunTime为Category动态关联对象使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系。我们通过之前的学习知道,对象一开始初始化的时候其属性为nil,给属性赋值其实就是让属性指向一块存储内容的内存,
前言在iOS开发过程中,会经常使用到一个修饰词“weak”,使用场景大家都比较清晰,用于一些对象相互引用的时候,避免出现强强引用,对象不能被释放,出现内存泄露的问题。weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 nil。weak底层原理1.weak编译解析首先需要看一下weak编译之后具体出现什么样的变化,通过Clang的方法把weak编译成C++
转载
2023-07-25 17:37:47
112阅读
在iOS开发中,我们经常使用到category,使用category可以给类添加方法或者属性,在添加属性的时候,如果仅仅声明属性,编译器并不会自动生成set和get方法,此时直接使用属性进行读写会发生crash,此时需要通过关联对象来增加属性的set和get方法实现。关联对象的使用先创建一个类名称为Custom,并且增加category命名为Prop,写入代码Custom.h#import <
转载
2023-07-25 10:18:40
57阅读
在开始阅读本篇博客之前,建议先去看看我的上一篇博客iOS底层探索之对象的本质和类的关联特性initIsa(上) 本篇内容主要讲下OC当中类的关联相关的initIsa1.initIsa结构从苹果开源的objc底层源码可以看到OC底层是通过initIsa和cls类进行关联的//关联对象
if (!zone && fast) {
obj->initInst
转载
2023-12-12 18:47:02
49阅读
前言提到关联对象不得不让我们想到两个概念: 1.分类 category专门用来给类添加新的方法不能给类添加成员变量和属性,添加了成员变量,也无法获取到注意:可以通过 关联对象的方式给类动态添加属性。分类中用 @property 定义变量,只会生成变量的 getter、setter 方法的声明,不能生成方法的实现和带下划线的成员变量。2.类扩展 extension可以说成是特殊的分类,也称作匿名分类
转载
2023-09-03 11:09:58
51阅读
# iOS 关联对象存放位置的实现指南
## 1. 引言
在iOS开发中,关联对象(Associated Objects)使我们能够动态地将属性添加到现有的类中,而无需直接修改类的源代码。这对分类(Category)特别有用。本文将详细介绍如何在iOS中实现关联对象的存放位置,包括每一步的代码和解释。
## 2. 流程概述
下面的表格展示了实现关联对象存放位置的整个流程:
| 步骤 |
关联关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。在类的定义之外为类增加额外的存储空间使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键
转载
2024-01-29 10:26:52
30阅读
关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。在类的定义之外为类增加额外的存储空间 使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。 关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是
转载
2023-09-13 16:13:36
89阅读
Category中可以添加属性、协议、方法等, 但是并不能添加成员变量, 根据Category在底层的结构也可以发现,并没有存放成员变量的地方 一、准备代码定义Person类, 继承自NSObject, 有一个int类型age属性 定义Person类的分类Person+Test1, 有两个属性, 分别是int类型的weight和NSString类型的name
类中的属性, 实际上会生成一个
转载
2024-07-23 13:23:16
18阅读
一、什么是关联对象1.关联对象的概念:associatedObject又称关联对象,把一个对象关联到另外一个对象身上,使两者能够产生联系,我们可以通过associatedObject来给分类扩展属性。在iOS开发中,使用associatedObject之前,必须导入<objc/runtime.h>的头文件。2.关联对象的常用方法://关联对象 void objc_
原创
2023-02-06 14:44:36
144阅读
点赞
GraphQL并不会实现关联查询,数据关联需要程序自己实现 官网首页有介绍获取多个资源只需要一个请求,如想获取用户信息和,原来需要先查用户信息,再通过用户id查询,而在GraphQL中一次请求就可以实现。 对于这个观点我不敢苟同,可能我还没有体会到这种感觉,我认为只要需求明确,多
原创
2022-04-22 11:30:33
442阅读
# 在 iOS 中使用 MVVM 和关联对象实现双向绑定
在 iOS 开发中,MVVM(Model-View-ViewModel)架构模式能够有效地解耦代码,并提高代码的可维护性和可测试性。实现双向绑定是一项强大的功能,它允许视图和模型之间的状态同步本文将引导你通过步骤来实现这一目标。
## 流程概述
下面是大致的流程步骤,以表格形式展示:
| 步骤 | 说明
原创
2024-10-16 05:36:54
66阅读
作用在已存在的类的 category 中,可以添加自定义属性。为何需要在分类中,因为类的实例变量的布局已经固定,使用 @property 已经无法向固定的布局中添加新的实例变量(这样做可能会覆盖子类的实例变量),所以我们需要使用关联对象以及两个方法来模拟构成属性的三个要素。 实现方法在头文件中如下: @interface NSObject (asso)///为NSObject这个类添加一个新的...
原创
2021-05-30 21:29:05
218阅读
# 在 iOS 中使用关联对象添加成员变量存放位置的实现
在 iOS 开发中,关联对象是一种非常有用的技术,可以在运行时为一个类动态添加属性。通过这种方式,可以在 Objective-C 中为一个类添加新的实例变量,而不需要修改其原始实现。本文将带你了解如何在 iOS 中使用关联对象来添加成员变量,并介绍其存放位置的相关实现。整个过程我们会分成几个简单的步骤,通过表格的形式展现整个流程。
##
原创
2024-08-11 06:34:14
40阅读