数据结构简介
什么是数据结构?
1、计算机存储以及组织数据的方式
2、也可以理解为,有一堆数据,他们之间有些特殊的关系
常见的数据结构
1、线性表(数组 链表 栈 队列)
2、树
3、图
存储结构
1、顺序存储结构存储单元内存地址是连续的
2、链式存储结构存储单元内存地址可以是连续的也可以是不连续的,它不要求逻辑上相邻的元素在地里位置上也相邻
线性表
什么是线性表?
1、线性表就是多个具有相同特性的数据元素(节点)组成的,有限而且有序的集合
2、当线性表的节点个数为0时,我们称之为空表
3、线性表第一个元素称为首节点,最后一个元素称为尾节点
block的理解,外部变量的修改
block的定义
void (^block)(void) = ^{
NSLog(@"block");
}
block();
//无参无返回值block
/**
block的分类
1、NSGLobalBlock
2、NSMallocBlock
3、NSStackBlock 栈
*/
NSLog(%@,block);//没有引入外部变量的block就是NSGLobalBlock
int a = 10;
void (^block)(void) = ^{
NSLog(@"%d",a);
NSLog(@"block");
}
block();//引入外部变量的block就是堆block(NSMallocBlock)=赋值符号相当于copy 由原来的栈拷贝到了堆
NSLog(@"%@", ^{
NSLog(@"%d",a);
});//栈block (NSStackBlock此用法较少没什么意义)
修改外部变量
//前0x7fff5d34dc88 16进制
//后0x604000038d38
//中0x604000038d38
//栈区空间比较小 2M 1024*1024 = 10^6*2
__block int a = 10;
NSLog(@"前%p",&a);
void (^block)(void) = ^{
NSLog(@"中%p",&a);
a + = 10;
NSLog(@"%d",a);
}
block();
//__block 把观察到的变量由栈区copy到堆区
NSLog(@"后%p",&a);
C语言监听block
在终端输入touch.block.c
vim block.c
gcc block.c
此时报错显示缺少;添加分号即可
此刻生成了a.outC的可执行文件
./a.out block.c
clang -rewrite-objc block.c
此刻生成block.cpp文件
屏幕快照 2019-06-19 上午11.23.37.png 屏幕快照 2019-06-19 上午11.26.57.png
屏幕快照 2019-06-19 上午11.32.57.png
添加变量a ,并打印变量,如图:
屏幕快照 2019-06-19 下午1.20.17.png
在C语言下理解:
屏幕快照 2019-06-19 下午1.23.48.png
__block修饰
屏幕快照 2019-06-19 下午1.25.58.png
理解:
屏幕快照 2019-06-19 下午1.30.33.png
屏幕快照 2019-06-19 下午1.32.31.png
屏幕快照 2019-06-19 下午1.33.33.png
注意:在block里进行的操作是在堆区进行的操作!!!
在MRC下block必须用copy修饰 但是在ARC下用strong和copy都可以
YYKit的分析以及使用
-(void)viewDidLoad{
[super viewDidLoad];
NSDictionary * dict = @{@"name":@"Lucy",@"nickName":@"Lucy",@"age":@"18",@"books":@"iOS"};
[self testYY:dict];
[self testMJ:dict];
}
-(void)testYY:(NSDictionary*)dict{
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
for(int I = 0;i< 10000,i++){
//字典转模型
Person * p = [Person modelWithDictionary:dict];
}
NSLog(@"%.2f", CFAbsoluteTimeGetCurrent() - start);//0.23
}
-(void)testMJ:(NSDictionary*)dict{
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
for(int I = 0;i< 10000,i++){
//字典转模型
Person * p = [Person mj_objectWithKeyValues:dict];
}
NSLog(@"%.2f", CFAbsoluteTimeGetCurrent() - start);//1.84
}
masonry
masonry内结构图
最重要的三个方法
屏幕快照 2019-06-19 下午5.25.46.png
屏幕快照 2019-06-19 下午5.28.11.png
网友评论