數(shù)據(jù)結(jié)構(gòu)簡介
什么是數(shù)據(jù)結(jié)構(gòu)?
1矮慕、計算機存儲以及組織數(shù)據(jù)的方式
2帮匾、也可以理解為,有一堆數(shù)據(jù)痴鳄,他們之間有些特殊的關(guān)系
常見的數(shù)據(jù)結(jié)構(gòu)
1瘟斜、線性表(數(shù)組 鏈表 棧 隊列)
2、樹
3痪寻、圖
存儲結(jié)構(gòu)
1螺句、順序存儲結(jié)構(gòu)存儲單元內(nèi)存地址是連續(xù)的
2、鏈式存儲結(jié)構(gòu)存儲單元內(nèi)存地址可以是連續(xù)的也可以是不連續(xù)的橡类,它不要求邏輯上相鄰的元素在地里位置上也相鄰
線性表
什么是線性表蛇尚?
1、線性表就是多個具有相同特性的數(shù)據(jù)元素(節(jié)點)組成的顾画,有限而且有序的集合
2取劫、當線性表的節(jié)點個數(shù)為0時,我們稱之為空表
3研侣、線性表第一個元素稱為首節(jié)點谱邪,最后一個元素稱為尾節(jié)點
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
//棧區(qū)空間比較小 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 把觀察到的變量由棧區(qū)copy到堆區(qū)
NSLog(@"后%p",&a);
C語言監(jiān)聽block
在終端輸入touch.block.c
vim block.c
屏幕快照 2019-06-19 上午11.14.10.png
gcc block.c
此時報錯顯示缺少傀蚌;添加分號即可
此刻生成了a.outC的可執(zhí)行文件
./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里進行的操作是在堆區(qū)進行的操作I旗拧!库继!
在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++){
//字典轉(zhuǎn)模型
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++){
//字典轉(zhuǎn)模型
Person * p = [Person mj_objectWithKeyValues:dict];
}
NSLog(@"%.2f", CFAbsoluteTimeGetCurrent() - start);//1.84
}
masonry
masonry內(nèi)結(jié)構(gòu)圖
屏幕快照 2019-06-19 下午3.48.30.png
最重要的三個方法
屏幕快照 2019-06-19 下午5.25.46.png
屏幕快照 2019-06-19 下午5.28.11.png