FatOfYoung


  • 首页

  • 归档

OC分类原理

发表于 2018-06-13 | 分类于 OC

Category分类原理

分类的结构

每个分类文件编译后产生的结构体 _category_t 都是独立的,以下为分类的结构体

1
2
3
4
5
6
7
8
9
struct _category_t
{
const char *name;
struct _class_t *cls;
const struct _method_list_t *instance_methods;
const struct _method_list_t *class_methods;
const struct _protocol_list_t *protocols;
const struct _prot_list_t *properties;
};
instance_methods class_methods protocols properties
实例方法 类方法 遵守的协议 属性列表
阅读全文 »

OC对象本质

发表于 2018-05-11 | 分类于 OC

一个NSObject对象占用多少内存

例如,定义如下代码

1
NSObject *obj = [[NSObject alloc] init];

使用 clang -rewrite-objc filename.m -o filename.cpp

使用 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.c -o main-arm64.cpp

将以上的代码转为 C++ 文件,找到定义 NSObject 结构体

1
2
3
struct NSObject_IMPL { 
Class isa;
};
阅读全文 »

OC对象分类

发表于 2018-05-01 | 分类于 OC

OC对象

实例对象

每次通过 alloc 产生出的对象,每个产生的对象都占用着不同内存

例如

阅读全文 »

多重继承的内存结构

发表于 2017-05-16 | 分类于 C/C++

单重虚继承无虚函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class BaseClass
{
public:
int v1 = 0xaaaaaaaa;
int v2 = 0xbbbbbbbb;
};

class MyClass : virtual public BaseClass
{
public:
int v3 = 0xcccccccc;
int v4 = 0xdddddddd;
int v5 = 0xeeeeeeee;
int v6 = 0xffffffff;
};

void main()
{
MyClass myClass;
}
阅读全文 »

虚函数原理

发表于 2017-05-14 | 分类于 C/C++

定义

如果没有使用关键字 virtual ,程序将根据引用类型或指针类型选择方法;如果使用了 virtual 关键字,程序将根据引用或指针指向的对象的类型来选择方法(C++ Primer Plus)

例如 不使用关键字 virtual

阅读全文 »

结构体及其偏移量的计算

发表于 2017-04-21 | 分类于 C/C++

结构体的定义

不同类型的结合称为 结构体,相当于数组。但数组中的每个元素都是同一个类型,但结构体中的成员可以是不同类型。

同类型的两个结构体变量可以直接赋值,相当于 浅拷贝 memcpy()

阅读全文 »

fatofyoung@yeah.net

sense and simplicity

6 日志
2 分类
© 2019 fatofyoung@yeah.net
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4