高级进阶点

1、各种 Demo和功能框架

链接地址

VC自定义转场动画

2、大神 GitHub地址 都是干货:大神GitBubble

       0》各种干货demo Demo 、OC全面学习干货

       1》Git全面讲解 教程

       2》在线匹配正则(各种正则匹配公式)

       3》正则表达式讲解1正则表达式讲解2

 0、提升编译速度: iOS - Xcode提高编译速度,增量编译,ccache

1、代理


2、block:内部捕获的局部变量,值拷贝——> 内存地址 不变!同用一个内存地址! 但是  指向该内存的 指针地址 会生成一个新的 指针地址!

——————> block讲解

1、typedef void(^TestBlock)(void);

 NSString *test = @"test1111"; 

 NSLog(@"内存地址1:%p 指针地址1: %x",test,&test); // 内存地址1:0x10b654448 指针地址1: e50af2b8

 TestBlock b2 = ^(void){ 

                     NSLog(@"%@",test); // test1111

                     NSLog(@"内存地址2:%p 指针地址2: %x",test,&test); }; //内存地址2:0x10b654448 指针地址1: 294c0

  test = @"test2222"; b2(); 

 NSLog(@"内存地址3:%p 指针地址3: %x",test,&test); // 内存地址3:0x10b6544c8 指针地址3: e50af2b8


1>什么是 block:block 就是将函数执行上下文封装起来的对象,block的本质就是对象!

2>block 的截获变量特性?

               1-【基本数据类型】的局部变量 Block 可以截获其 ”值“(值拷贝)

               2-对于【对象类型的局部变量】连同所有权修饰符一起截获 ”浅拷贝“ ——> 内存地址是一样的,指针拷贝

              3-【局部静态变量】以 ”指针“ 的形式进行截获

               4- 【全局变量和静态全局变量】,block 是不截获的  ——>  block 最终调用的时候都是你修改后的值.

3>__block 的理解栈上 block 和堆上 block 的区别?

__block 的理解通过 【__block 修饰的变量】 最终会经系统 编译成为 一个【结构体】,结构体中有一个 isa 指针,和一个值 m 以及 __forwarding 指针,经过修饰以后,我们调用赋值操作其实就会转变为 m._forwarding->m = x,而在 block 内部也会对该__block 对象进行拷贝,故通过__block可以修改被截获变量的值

4>在 MRC和 ARC下有什么需要注意的?

      1>全局 Block当我们声明一个block时,如果这个block没有捕获外部的变量,那么这个block就位于全局区,此时对NSGlobalBlock的retain、copy、release操作都无效。ARC和MRC环境下都是如此。

        2>栈 Block这里可能有人会问,平时编程的时候很少遇到位于栈区的block,为什么呢?因为在ARC环境下,当我们声明并且定义了一个block,并且没有为Block添加额外的修饰符(默认是__strong修饰符),如果该Block捕获了外部的变量,实质上是有一个从__NSStackBlock__转变到__NSMallocBlock__的过程,只不过是系统帮我们完成了copy操作,将栈区的block迁移到堆区,延长了Block的生命周期。对于栈区block而言,栈block在当函数退出的时候,该空间就会被回收。那什么时候在ARC的环境下出现__NSStackBlock__呢?如果我们在声明一个block的时候,使用了__weak或者__unsafe__unretained的修饰符,那么系统就不会为我们做copy的操作,不会将其迁移到堆区。

        3>堆 Block在MRC环境下,我们需要手动调用copy方法才可以将block迁移到堆区,而在ARC环境下,__strong修饰的(默认)block只要捕获了外部变量就会位于堆区,NSMallocBlock支持retain、release,会对其引用计数+1或 -1。声明以及定义位于堆区的block如上图所示。

5>常见循环引用




3、KCO属性监听


4、KVC


5、多线程

1、多线程访问没有加锁处理的属性:会出现访问该属性的值不准确,比如线程4在写入之前是【12】,而此时线程3已经修改了属性为【123】,线程4处理完变成【1234】

2、常驻线程:

self.thread = [[NSThread alloc]initWithTarget:self selector:@selector(run) object:nil]; [self.thread start];

- (void)run{ //只要往RunLoop中添加了 timer、source或者observer就会继续执行,一个Run Loop通常必须包含一个输入源或者定时器来监听事件,如果一个都没有,Run Loop启动后立即退出。

                       @autoreleasepool { 

                                      //1、添加一个input source 

                                     [[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode]; [[NSRunLoop currentRunLoop] run]; // 注意!这个run执行后的代码不会执行了!!!!!!

                                    //2、添加一个定时器 

                                   // NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:YES]; // [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; // [[NSRunLoop currentRunLoop] run];

                       }

 }

//利用常驻线程处理事情【如果没有上面的那个监听端口,则这个 action方法不会执行!因为线程执行完就被自动回收释放了!】

[self performSelector:@selector(action) onThread:self.thread withObject:nil waitUntilDone:NO ];



runLoop:高级讲解


6、性能优化



7、数据库

1、数据库升级

2、多线程数据库


8、iOS日志写入和获取

1、使用demo地址

2、日志收集办法


9、单元测试、性能测试

1、系统测试框架:XCTest

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • RunLoop的运行逻辑 本文Demo代码可见gitHub_Demo 查看源码: RunLoop休眠的实现原理(如...
    dandelionYD阅读 359评论 0 1
  • 基本概念 进程 进程是指在系统中正在运行的一个应用程序,而且每个进程之间是独立的,它们都运行在其专用且受保护的内存...
    小枫123阅读 828评论 0 1
  • 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3 默认情况下主线...
    咖啡绿茶1991阅读 264评论 0 0
  • 1 Runloop机制原理 深入理解RunLoop http://www.cocoachina.com/ios/2...
    Kevin_Junbaozi阅读 3,858评论 4 30
  • 什么是RunLoop? 可以理解为字面意思:Run表示运行,Loop表示循环。结合在一起就是运行的循环的意思。哈哈...
    Nothing_xy阅读 206评论 0 0