Objective-C那些事儿
文章平均质量分 69
依旧风轻
葵花成海,你在不在
展开
-
分析一个实例对象的内存布局和大小
详细说明如何分析一个实例对象的内存布局和大小原创 2024-07-23 20:43:04 · 428 阅读 · 0 评论 -
理解 Objective-C 中 `+load` 方法的执行顺序
在 Objective-C 中,`+load` 方法是在类或分类被加载到内存时调用的。它在程序启动过程中非常早的阶段执行,用于在类或分类被加载时进行一些初始化工作。理解 `+load` 方法的执行顺序对于编写可靠的 Objective-C 代码非常重要。本文将详细探讨 `+load` 方法在类、子类和分类中的执行顺序。原创 2024-07-22 23:57:57 · 2830 阅读 · 0 评论 -
Objective-C 中字符串的保存位置
在 Objective-C 中,字符串常量和动态创建的字符串在内存中的保存位置通常是不一样的。这主要是因为它们的创建方式不同,导致它们在内存管理上的处理方式也不同。原创 2024-07-12 10:34:40 · 962 阅读 · 0 评论 -
copy 和 mutableCopy 有点乱
copy 和 mutableCopy 有点乱原创 2024-07-11 23:38:50 · 580 阅读 · 0 评论 -
NSObject‘s MetaClass 的 super_class 指向谁 ?
在 Objective-C 运行时系统中,`NSObject` 是所有类的根类。为了理解 `NSObject` 的元类(MetaClass)以及它的 `super_class` 指针指向谁,我们需要理解元类的继承关系。原创 2024-07-10 13:06:01 · 454 阅读 · 0 评论 -
objc_object 与 objc_class 是一定要了解的底层结构
在 Objective-C 中,`objc_object` 和 `objc_class` 是运行时系统的核心结构,用于表示对象和类。理解它们的结构和关系对于掌握 Objective-C 的运行时机制非常重要。原创 2024-07-10 12:02:42 · 1272 阅读 · 0 评论 -
Objective-C 中的 isa 不再是简单的结构体指针
在 Objective-C 中,`isa` 指针是对象和类之间的重要桥梁。它不仅帮助运行时系统识别对象的类型,还参与了一些内存和性能优化。本文将深入讲解 `isa` 指针的内存结构,包括其在早期和现代实现中的演变。原创 2024-07-10 11:19:52 · 1073 阅读 · 0 评论 -
符号表和重定位表
ELF 文件:符号表存储在.symtab或.dynsym段,重定位表存储在.rel.text.rel.data等段。PE 文件:符号表存储在 COFF 符号表部分,重定位表存储在.reloc段。Mach-O 文件:符号表存储在LC_SYMTAB指定的位置,重定位表存储在指定的位置。这些表在程序的加载和执行过程中发挥关键作用,确保符号的正确解析和地址的正确调整。原创 2024-07-01 23:58:42 · 473 阅读 · 0 评论 -
哪些情况使用 Block 无需处理循环引用
在 Objective-C 开发中,有一些系统的 Block 不会导致循环引用,因此无需特别处理循环引用问题。这些系统的 Block 实现上已经处理了循环引用问题,因此在使用这些 Block 时无需额外处理循环引用。原创 2024-06-30 08:15:44 · 171 阅读 · 0 评论 -
Objective-C使用块枚举的细节
enumerateObjectsUsingBlock:的细节原创 2024-06-30 07:55:14 · 605 阅读 · 0 评论 -
Handling `nil` Values in `NSDictionary` in Objective-C
using the keyed subscript syntax (键下标语法) will remove the key-value pair from the dictionary if it exists, or do nothing if it doesn’t. This method is safer as it avoids crashes and handles。To avoid potential (潜在的) crashes and ensure your code handles。原创 2024-06-25 01:43:25 · 1927 阅读 · 0 评论 -
Message passing mechanism (消息传递机制)
objc_msgSend 是 Objective-C 运行时系统中的一个核心函数,用于实现消息传递机制。在 Objective-C 中,方法调用实际上是消息传递的过程,当你在代码中调用一个方法时,编译器会将其转换为 objc_msgSend 函数的调用。原创 2024-06-04 12:46:10 · 1085 阅读 · 0 评论 -
理解 iOS 开发中的 NS_ENUM 和 NS_OPTIONS
在开发 iOS 应用程序时,理解 `NS_ENUM` 和 `NS_OPTIONS` 的使用至关重要,因为它们在定义和管理枚举和选项方面起着重要作用。在本文中,我们将深入探讨 `NS_ENUM` 和 `NS_OPTIONS` 之间的区别、使用场景以及如何有效地实现它们。原创 2024-06-23 06:12:26 · 901 阅读 · 0 评论 -
iOS 中 attribute((constructor)) 修饰的函数
在 Objective-C 开发中,`attribute((constructor))` 是一个 GCC 和 Clang 编译器特性,允许开发者在程序启动时自动执行一些函数。使用这个属性修饰的函数会在 `main` 函数之前执行,通常用于初始化一些全局状态或者执行一些在程序开始时就需要完成的操作。原创 2024-06-18 19:59:49 · 1130 阅读 · 0 评论 -
Objective-C之通过协议提供匿名对象
接口隔离原则:通过定义细粒度的协议来避免实现庞大的接口。依赖倒置原则:高层模块依赖于抽象协议,而不是具体实现。里氏替换原则:不同的类实现相同协议,可以互换使用。单一职责原则:将不同职责分离到不同的协议中,使得类的职责单一且明确。这种设计方式使得代码更加灵活、可维护、可扩展,并且易于测试和复用。在 Objective-C 中,通过协议提供匿名对象是一种设计模式,通常用于实现接口(协议)的一致性和灵活性。这个设计模式有助于实现松耦合、提高可扩展性和维护性。原创 2024-06-05 09:50:38 · 991 阅读 · 0 评论 -
Objective-C相关开发中, 为什么 delegate protocol 不建议单独写一个头文件 ?
将 delegate protocol 定义放在与相关类的头文件中,有助于保持代码组织的一致性、减少编译依赖、避免命名冲突,并增强逻辑上的一致性。这些因素综合起来,使得这种做法在 Objective-C 开发中被广泛推荐。原创 2024-06-05 08:53:39 · 461 阅读 · 0 评论 -
Objective-C中分类无法添加实例变量的底层原理
对象的内存布局在类定义时确定,无法在运行时动态修改。分类是在运行时动态加载的,无法重新分配和布局现有的对象实例。这种设计保证了对象内存布局的稳定性和内存访问的安全性。分类主要用于扩展类的行为(添加方法),而不是扩展类的状态(添加实例变量)。如果需要添加实例变量,可以使用类扩展(Class Extension)或继承(Subclassing)来实现。原创 2024-06-05 08:30:36 · 965 阅读 · 0 评论 -
理解NSCopying协议
NSCopying协议用于让对象能够被复制。实现这个协议的类需要定义如何创建该对象的副本。这个副本是独立的,不会与原对象共享内存地址。原创 2024-06-05 08:17:48 · 550 阅读 · 0 评论 -
Objective-C对象的本质
Objective-C对象的本质是指向某块堆(heap)内存中数据的指针, 因为是指针, 顾在声明时, 通常会带有*:// 变量pointerVariable"指向"(point to)SQIObject类型的实例SQIObject *pointerVariable = [SQIObject new];所有Objective-C对象都是如此, 若想直接把对象所需的内存分配在栈(stack)上, 编译器会直接报错:// error: interface type cannot be statical原创 2021-01-23 13:52:21 · 130 阅读 · 1 评论 -
通用对象类型 VS具体对象类型
// 通用对象类型id genericTypedObject = [SQIObject new];// 具体对象类型SQIObject *specificTypeObject = [SQIObject new];以上两种定义, 本质是相同的, 区别在于, 若向specificTypeObject发送SQIObject类中没有定义的方法, 编译器会主动探知此情况, 并报错....原创 2021-01-23 00:08:28 · 164 阅读 · 0 评论 -
什么是id ?
What is id ?表示通用对象类型, 本质上是结构体指针, 出自Objective-C运行期组件库的头文件.// id的定义typeof struct objc_object { Class isa;} *id;原创 2021-01-22 23:46:39 · 621 阅读 · 0 评论 -
什么是`Cocoa`和`Cocoa Touch` ?
What is Cocoa and Cocoa Touch ? 什么是Cocoa和Cocoa Touch ?官方文档:Cocoa(Touch)What Is Cocoa?比较官方和正式的说法(或者说定义)是:OS X和iOS平台的应用开发环境,Cocoa对应OS X平台,Cocoa对应iOS平台Application development environments 应用程序开发环境"开发环境"该怎样理解呢 ? 我一直认为这不是一个很好的描述, 表述为: 开发的基础库更为合理, 为了能够支原创 2021-01-18 00:28:04 · 240 阅读 · 0 评论 -
Getting to know `Objective-C`
Getting to know Objective-C(初识Objective-C)The origin of Objective-C language Objective-C语言的起源20世纪80年代,受SmallTalk的启发,Brad Cox在当时最流行的C语言基础上,增加了一些微妙但意义重大的新特性,如消息机制(message)和面向对象(Object Oriented Programming)。增加的这部分作为一个集合(C语言的扩展集),统称为Objective-C。与大多数人的理解不同原创 2021-01-17 16:27:42 · 128 阅读 · 0 评论