面试数据结构(三)

数据结构简介
什么是数据结构?
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

屏幕快照 2019-06-19 上午11.14.10.png
esc GG光标到最前面 shift + G全选 退出保存wq
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的分析以及使用

屏幕快照 2019-06-19 下午1.47.53.png

-(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 下午3.48.30.png

最重要的三个方法
屏幕快照 2019-06-19 下午5.25.46.png

屏幕快照 2019-06-19 下午5.28.11.png

你可能感兴趣的:(面试数据结构(三))