IOS开发 基础学习

1、TAG

2、alloc  init

3、堆栈

4、atomic、nonatomic

5、__block、__weak、__strong

6、delegate、KVO、通知    的区别

7、KVO、KVC

8、SDWebImage

9、https 的介绍

10、TCP的三次握手

1、TAG

- (nullable __kindof UIView *)viewWithTag:(NSInteger)tag; // recursive search. includes self

[UIView viewWithTag:10]; 这种类型 通过 tag 去获取一个子控件 我们经常使用,那怎么实现的呢。看到注释我们看到了,是通过递归的方式去在当前的控件去一个一个找到对应tag值的子控件,找到第一个就结束。首先是从自身开始。也就是说 说过自身控件的 tag 跟子控件的 tag 也不能够重复,不然则返回的为自己本身,这个是开发过程中需要注意到的一点。

2、alloc  init

MyClass* myObj = [MyClass alloc]  init];

alloc 开辟内存空间,并且把地址返回给指针,alloc 后该内存空间还不能被使用,所以需要 init 初始化这块内存空间,才可以使用这块内存空间。

3、堆栈

栈区:由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的。优点是快速高效,缺点是有限制,数据不灵活 。[先进后出]

栈空间分 静态分配 和 动态分配 两种。

静态分配是编译器完成的,比如自动变量(auto)的分配。 动态分配由alloca函数完成。 栈的动态分配无需释放(是自动的),也就没有释放函数。 为可移植的程序起见,栈的动态分配操作是不被鼓励的。

堆区:有程序员分配和释放,如果程序员不释放,程序结束时,可能会被操作系统回收。比如:alloc 的内存都是放在推里。优点是灵活方便,但是效率低

4、atomic、nonatomic

1、atomic、nonatomic 相当于 set / get 方法

atomic:提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么就是说,系统会自动的创建lock锁,锁定变量。性能减少。[效率低,速度慢]

nonatomic:禁止多线程,变量保护,提高性能。如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率,但是线程不安全。[效率高,速度快 ]

2、assign

assign:修饰基本数据类型,比如 float int 等基本数据类型,修饰的内容存放在栈里面。

3、copy、strong

copy:复制对象,在数据更改的时候,保证之前被复制的对象不被更改。

NSString * string1 = @"abc";

NSString * string2 = string1copy;

string2 = @"abcde";

string2 是 string1 copy 而来,则 后面 string2 值发生改变的时候则 string1的值 不会发生改变。 在copy的时候 内存 重新给 string2 分配了内存空间,内存地址指向string2。所以string2 的值发生改变不会影响string1 的变化。如果不用 copy 深拷贝。

NSString * string2 = string1;

这样的话,是 string1 赋值 给 string2,string2 指向的 跟 string1 指向的内存地址 是同一块地址,则一个值方式改变就会影响另一个值发生变化。

strong:复制对象时,被复制的对象会跟着 复制的对象改变而改变。

5、__block、__weak、__strong

__weak: 弱引用,引用的对象的计数 不会加一 , __weak 修饰的变量,当其他地方的变量被释放之后,block 中的变量 也会被释放掉。如果block 中用 __strong 去修饰,则不会被释放掉,知道 block 执行结束之后才会被释放。

例如:

1        __weak currentViewController *weakSelf = self;

2        dispatch_async(dispatch_get_global_queue(0,0), ^{

3        __strong currentViewController *strongSelf = weakSelf;

4        for (NSInteger i = 0; i < 100; i++) {

5                NSLog(@"%@",strongSelf);

6                sleep(1);

7        }

8        });

【注意】:第1行 也可以使用 __weak __typeof(&*self) weakSelf = self;  等同于的。

上面代码中 在 currentViewController 中添加如上代码。在 pop 回到上一个页面的话,当前的 currentViewController 是不会被释放的,currentViewController 中添加的方法 -(void)dealloc; 也是不会被调用的,直到 block 中的代码执行结束之后 才会走  -(void)dealloc 方法,释放当前 Controller 。如果我们我们把上面的 第三行代码:__strongcurrentViewController*strongSelf = weakSelf; 注释掉的话,则在pop回到上一个页面, 则 currentViewController 会立即调用  -(void)dealloc; 方法。释放当前的 Controller 。

如果我们把 第一行代码:__weak currentViewController *weakSelf = self; 注释掉,第五行改为:NSLog(@"%@",self);, 则同样 是不会释放掉,需等block 执行完成 才会释放  currentViewController;所以我们在使用 block 的是否 需要注意 去使用 __weak 去修饰。防止离开当前页面,没法进行销毁掉。

__block 与 __weak的区别:在 block 中修改 局部变量的 值,需要 需要 __block 进行修改才可以进行更改,不能使用 __weak 修饰。

weak 弱引用,很多弱引用的对象会放到一个容器中来管理,一个对象可能会被多次弱引用,弱引用的地址会放到一个容器里。当对象不再被强引用的时候 在释放的时候,从容器中找到这个对象所有的弱引用,将其小孩,置为 nil 。

6、delegate、KVO、通知    的区别

delegate:使用代理,就必须执行代理中 必须要实现的方法。代理可以是任何一个类型的对象。需要执行的方法,传递的参数已经参数的类型,需要在delegate协议中明确的定义清楚。但是协议 必须在 Controller 的作用域范围内定义。能够接受协议方的返回值。delegate的定义 需要用 weak 修饰,不然delegate 。

通知:一对多的实现,发起一个通知,可以对多处 注册有该通知的 都会被通知到。检查不了通知是否被通知到。释放的时候,需要手动在通知中心取消注册。与delegate相比 更难以跟踪。通知后不能从观察者获取任何反馈信息。

KVO:两个对象之间保持同步的一种方法。当一个对象发送变化,观察对象就马上做出反应。他只能对属性做出反应,不能使方法。可以知道 观察的属性改变前后的值。

7、KVO、KVC

KVC 作用是修改属性的值,KVO 可以监听 一个对象 属性值改变情况。

当一个对象调用setValue:forKey: 方法时,方法内部会做以下操作:

1.判断有没有指定key的set方法,如果有set方法,就会调用set方法,给该属性赋值

2.如果没有set方法,判断有没有跟key值相同且带有下划线的成员属性(_key).如果有,直接给该成员属性进行赋值

3.如果没有成员属性_key,判断有没有跟key相同名称的属性.如果有,直接给该属性进行赋值

4.如果都没有,就会调用 valueforUndefinedKey 和setValue:forUndefinedKey:方法

KVO: 是基于 runtime 机制实现的。当一个对象(假设是person对象,对应的类为 JLperson)的属性值age发生改变时,系统会自动生成一个继承自JLperson的类NSKVONotifying_JLPerson,在这个类的 setAge 方法里面调用。当观察对象A时,KVO机制动态创建一个新的名为:NSKVONotifying_A的新类,该类继承自对象A的本类,且 KVO 为 NSKVONotifying_A 重写观察属性的 setter 方法,setter 方法会负责在调用原 setter 方法之前和之后,通知所有观察对象属性值的更改情况。

[super setAge:age];

[self willChangeValueForKey:@"age"];

[self didChangeValueForKey:@"age"];

三个方法,而后面两个方法内部会主动调用

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法,在该方法中可以拿到属性改变前后的值.

添加的 KVO 需要在 dealloc 中进行移除。[xx removeObserver:self forkeyPath:@"text" content:nil];

8、SDWebImage

SDWebImage底层实现有沙盒缓存机制,主要有三块组成

1、内存图片缓存

2、内存操作缓存

3、磁盘沙盒缓存

首先从内存中查找是否有图片缓存,如果有就直接显示,如果没有

就生成 NSInvocation 添加到 队列中从硬盘中查找图片是否有缓存,有就将图片 添加到内存缓存中。如果都没有有

就生成一个下载器 SDWebImageDownloader 开始下载图片。下载完成的图片 同时添加到内存缓存和硬盘缓存中,

写入 硬盘单独 用NSinvocationOperation 完成,避免拖慢主线程。

9、https 的介绍

HTTPS(HTTP over SSL,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装。HTTP 协议原有的 GET、POST 之类的机制,基本上原封不动),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。【 https = http + ssl 】

两种基本的加解密算法类型

对称加密:

密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等。

非对称加密:

密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

HTTP下加入SSL层,来保证数据传输的安全,

http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

劣势

对数据进行加解密决定了它比http慢

需要进行非对称的加解密,且需要三次握手。

首次连接比较慢点,当然现在也有很多的优化。

10、TCP的三次握手

第一次握手:客户端发送syn(syn=j)包到服务器,并进入syn_send状态,等待服务器进行确认;

第二次握手:服务器收到客户端的syn包,必须确认客户的SYN(ack = j + 1),同时自己也发送一个SYN包(syn = k),即SYN + ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户收到服务器发送的SYN+ACK包之后,向服务器发送确认包(ACK = k + 1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成第三次握手。


待更新 ...

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

推荐阅读更多精彩内容