随笔日记1

2017-03-22  本文已影响0人  独行搬砖侠丶

SwiftyJSON是iOS Swift语言JSON解析的三方库,主要是基于对iOS原生JSONSerialization类的封装

若想令自己所写的对象具有拷贝功能,则需实现 NSCopying 协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopying与 NSMutableCopying协议。

runtime 主要体现在以下几个方面:

关联对象Associated Objects消息发送Messaging消息转发Message Forwarding方法调配Method Swizzling“类对象” NSProxyFoundation | Apple Developer DocumentationKVC、KVOAbout Key-Value Coding 动态获取class 和slector  给分类添加属性和 KVC/KVO了。

获取存储weak对象的map,这个map的key是对象的地址,value是weak引用的地址。当对象被释放的时候,根据对象的地址可以找到对应的weak引用的地址,将其置为nil即可。这就是在weak背后的黑魔法。

RC的内部实现

ARC背后的引用计数主要依赖于这三个方法:retain 增加引用计数  release 降低引用计数,引用计数为0的时候,释放对象  autorelease 在当前的auto release pool结束后,降低引用计数。

readwrite:默认的属性,可读可写,生成setter和getter方法。readonly:只读,只生成getter方法,也就是说不能修改变量。

assign:用于声明基本数据类型(int、float)仅设置变量,是赋值属性。

retain:持有属性,setter方法将传入的参数先保留,再赋值,传入的参数 引用计数retaincount 会加1

strong:强引用,引用计数+1,ARC下,一个对象如果没有强引用,系统就会释放这个对象。

weak:弱引用,不会使引用计数+1.当一个指向对象的强引用都被释放时,这块空间依旧会被释放掉。

nonatomic:非原子性,可以多线程访问,效率高。

atomic:原子性,属性安全级别的表示,同一时刻只有一个线程访问,具有资源的独占性,但是效率很低。

__weak与weak基本相同。前者用于修饰变量(variable),后者用于修饰属性(property)。__weak 主要用于防止block中的循环引用。

__block也用于修饰变量。它是引用修饰,所以其修饰的值是动态变化的,即可以被重新赋值的。__block用于修饰某些block内部将要修改的外部变量。

__weak和__block的使用场景几乎与block息息相关。而所谓block,就是Objective-C对于闭包的实现。闭包就是没有名字的函数,或者理解为指向函数的指针。

Swift 中,类是引用类型,结构体是值类型。值类型在传递和赋值时将进行复制,而引用类型则只会使用引用对象的一个"指向"。所以他们两者之间的区别就是两个类型的区别。 内存中,引用类型诸如类是在堆(heap)上,而值类型诸如结构体实在栈(stack)上进行存储和操作。相比于栈上的操作,堆上的操作更加复杂耗时,所以苹果官方推荐使用结构体,这样可以提高 App 运行的效率。

datasource协议里面东西是跟内容有关的,主要是cell的构造函数,各种属性

delegate协议里面的方法主要是操作相关的,移动编辑之类的,你都写上要用什么方法自己去翻就是了

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的主要差别在于它们是不同的操作系统资源管理方式:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

一  iOS中都有什么设计模式?1.代理模式2.观察者模式3.MVC模式4.单例模式5.策略模式6.工厂模式

上一篇下一篇

猜你喜欢

热点阅读