OC生命周期、内存管理、Runtime、GCD、Http协议与TCP协议

UIViewController 生命周期

  • initWithNibName: bundle:
  • initWithCoder:
  • awakeFromNib:
  • loadView:
  • ViewDidLoad
  • ViewWillAppear
  • ViewWillLayoutSubviews
  • ViewDidLayoutSubviews
  • ViewDidAppear
  • ViewWillDisappear
  • ViewDidDisappear
  • dealloc

Http协议与TCP协议简单理解

TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。(所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。)

ARC内存管理机制

  • 对于strong,在ARC下,某个对象引用计数大于0,该对象就不能销毁;一旦该对象引用计数等于0,该对象销毁;
  • 对于weak,在ARC下,weak指针不会增加其指向对象的引用计数;当其指向的对象销毁后,weak指针自动设置nil,避免出现野指针;
  • 对于copy,分浅拷贝和深拷贝;浅拷贝(对不可变对象):副本和源对象是同一个对象,源对象的引用计数加1,其本质是增加了一个指向源对象的指针;
    深拷贝(对可变对象):副本和源对象是不同的两个对象,源对象引用计数器不变,副本计数器为1;其本质是产生了新的对象;
那么copy和retain的区别是?

retain可对可变对象不可变对象同时操作,对象的引用计数器自增1,结果与浅拷贝一样,但对可变对象的操作却不能实现和copy一样的效果;

Block为什么用copy关键字?

Block在没有使用外部变量时,内存存在全局区,然而当Block使用外部变量时,内存却存在于栈区,当Block copy之后,是存在堆区的(存在于栈区的对象随时有可能被销毁);

Runtime

  • 从技术层理解
    1. runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。
    2. 在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者 。
  • 自己的理解
    总结:首先,编译器将代码[receiver message];转化为objc_msgSend(receiver, @selector (message));,在objc_msgSend函数中。首先通过obj的isa指针找到obj对应的class。在Class中先去cache中 通过SEL查找对应函数method,若 cache中未找到。再去类的分派表中查找,若分派表中未找到,则去superClass中查找,如此一致回溯至NSObject类。若能找到,则将method加入到cache中,以方便下次查找,并跳转到对应的函数中去执行。
    链接:https://blog.csdn.net/shorewb/article/details/50756231
为什么用id修饰方法属性时,能找到方法对应的类?

id是无类型指针,是指向objc_object的结构体指针,它包含一个Class isa成员,根据isa指针可以找到对象所属的类;

字典转模型的原理

  • 所有继承于NSObject的类,都会继承NSKeyValueCoding协议,字典转模型时,需要self对象调用setValuesForKeysWithDictionary方法,底层基于runtime获取到类所有的属性,再通过setValue: forKey:来将字典中的keyValue转换为模型对应的值;

GCD

  • 队列的执行
    1.同步串行队列
    不创建新线程,按顺序执行;

    2.同步并行队列
    不创建新线程,按顺序执行;

    3.异步串行队列
    异步任务放在串行队列执行时,任务只会在一个新开的线程中,按顺序执行;

    4.异步并行队列
    异步任务放在并行队列中执行时,异步任务会在不同的线程中执行,不知道顺序;

  • 关于线程操作

// 串行队列
dispatch_queue_create
// 并行队列
dispatch_get_global_queue

1.异步子线程中调用同步主线程的方法会怎样?

 dispatch_async(...,{
   dispatch_sync(dispatch_get_main_queue,...);
 });

可以调用,没事
2.在主队列用同步函数创建任务,是会卡住的;

会卡死
 dispatch_queue_t queue = dispatch_get_main_queue();
 dispatch_sync(queue, ^{
     
 });

3.同步队列中创建同步队列(同一个),卡死;

会卡死
  dispatch_queue_t queue = dispatch_queue_create("year", DISPATCH_QUEUE_SERIAL);
    dispatch_sync(queue, ^{
        NSLog(@"同步线程%@", [NSThread currentThread]);
        dispatch_sync(queue, ^{
            NSLog(@"tong%@", [NSThread currentThread]);
        });
    });
不会卡死
 dispatch_queue_t queue1 = dispatch_queue_create("year", DISPATCH_QUEUE_SERIAL);
 dispatch_queue_t queue2 = dispatch_queue_create("year2", DISPATCH_QUEUE_SERIAL);
 dispatch_sync(queue1, ^{
     NSLog(@"同步线程%@", [NSThread currentThread]);
     dispatch_sync(queue2, ^{
         NSLog(@"tong%@", [NSThread currentThread]);
     });
 });

线程队列创建:https://blog.csdn.net/a359696929/article/details/51364040

注意:可以参考GCD队列中新线程的创建,来就线程操作的问题进行分析;
nonatomic与atomic的区别和作用?

atomic原子性,nonatomic非原子性,atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择atomic,系统会自动创建lock锁,锁定变量;nonatomic禁止多线程,变量保护,提高性能(互斥锁);

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

推荐阅读更多精彩内容