树懒's repositories
ZPAssociatedObject
本Demo主要介绍了原类与分类在.h文件中添加属性之后的不同之处。还介绍了分类能够添加属性,但是不能添加成员变量。还从两方面解释了给分类添加属性后,系统为什么不能像原类一样生成一个带下横线的成员变量。还介绍了在分类中添加完属性之后,使用Runtime运行时机制的关联对象方式重写属性的set和get方法,使之在其他类中能够正常使用点语法来给分类的属性赋值和取值
ZPCallInitializeMethod
本Demo主要介绍了initialize类方法在什么时候被调用、initialize类方法的调用原理,还重点介绍了initialize类方法的调用顺序以及initialize类方法与load类方法的区别。
ZPCategory
本Demo主要介绍了分类的实现原理、原类和分类中方法的调用顺序以及分类和类拓展的区别。
ZPCallLoadMethod
本Demo主要介绍了类中的load类方法在什么时候加载,还介绍了load类方法的调用原理,还重点介绍了load类方法调用顺序的原则。除此之外,还复习了类对象调用分类中的方法的原理,看起来像是分类里面的方法把原类里面的方法给覆盖了。
KVCGetPropertyValueTheory
本Demo主要介绍了利用KVC的"valueForKey: "方法来获取对象的属性值或者成员变量值的运行原理。
KVCSetPropertyValueTheory
本Demo主要介绍了利用KVC的常用API "setValue: forKey: "来给对象的属性或者成员变量赋值的原理。
ZPKVC
本Demo主要介绍了KVC的概念以及KVC的常见API,还介绍了如何用KVC的方式设置属性值、获取属性值,还介绍了"setValue: forKey: "与"setValue: forKeyPath: "方法的区别,还介绍了通过KVC的方式修改对象的属性值时会触发KVO的监听方法。
ZPKVOSupplement
本Demo主要讲述了修改对象的成员变量的值是不能够触发KVO的监听方法的,并且阐述了原因。还介绍了如果想在修改对象的成员变量的值的时候能够调用KVO的监听方法的话应该怎么做。
ZPKVO
本Demo主要介绍了如何添加KVO监听以及KVO的实现原理。
ZPIsaAndSuperclass2
本Demo主要介绍了某个类的instance对象中的isa指针的值应该和这个类的class对象的地址值相同,但是从控制台打印出来的结果是不一样的,其原因就在于64位系统下的isa的值要通过一次位运算才能算出这个类的class对象的地址值了。
ZPIsaAndSuperclass1
本Demo主要介绍了子类中没有实现类方法,它的父类中也没有实现相同的类方法,但是父类中实现了相同方法名的实例方法,当子类的类对象调用这个方法名的时候,底层是如何调用的。
ZPIsaAndSuperclass
本Demo主要介绍了实例对象、类对象、元类对象之间的关系,还从Runtime原理的角度分析了OC对象是如何调用方法的。
ZPOCObjectsType
本Demo主要介绍了OC对象的三个种类:instance对象(实例对象)、class对象(类对象)、meta-class对象(元类对象)以及他们中存储的内容,还介绍了object_getClass和class_isMetaClass函数的用法。
ZPOCObjectEssence3
本Demo主要通过一个自定义类内部的成员变量分析了这个自定义类实际上占用多少内存空间,还介绍了通过sizeof运算符、class_getInstanceSize函数和malloc_size函数打印的结果以及原因。
ZPOCObjectEssence2
本Demo主要介绍了具有父子关系的两个自定义类的底层实现是如何的,还介绍了这样的两个自定义类所占的内存空间的大小。
ZPOCObjectEssence1
本Demo主要介绍了自定义类的底层实现以及占用多少内存空间。
ZPOCObjectEssence
本Demo主要介绍了OC的对象和类的本质就是一个结构体、NSObject对象的底层结构、一个NSObject对象占用多少内存空间、class_getInstanceSize和malloc_size函数的区别、lldb的常用指令。
ZPAutoreleaseTheory
本Demo回顾了day24中的《内存布局》Demo中的关于内存布局、Tagged Pointer的知识,还回顾了day25中的《内存管理》Demo中的MRC内存管理原则的知识,还回顾了day26中的《weak指针原理》Demo中的ARC的执行机制。除此之外,还介绍了引用计数的存储的相关内容。最最重要的是介绍了在MRC环境中创建实例对象之后两种释放这个对象的方式和相应的释放原理,以及在ARC环境中开发者在创建完一个实例对象之后,系统自动添加释放代码的两种方式和相应的释放原理。
ZPWeakPointerTheory
本Demo主要介绍了用"__strong"、"__weak"和"__unsafe_unretained"关键字来修饰的指针的原理,还介绍"__weak"和"__unsafe_unretained"关键字的区别。
ZPMemoryManagement
本Demo主要介绍了引用计数的概念,还介绍了在MRC环境下调用"retain"和"release"方法对对象引用计数的影响,还介绍了在MRC环境下调用"alloc"、"new"、"copy"、"mutableCopy"等方法的时候应该调用"release"或者"autorelease"方法来手动释放内存,还介绍了内存泄漏的原因,还介绍了在MRC环境下"autorelease"方法的作用,还介绍了在MRC环境下"@autoreleasepool"关键字的作用,还剖析了在MRC环境下对可变和不可变字符串调用"copy"和"mutableCopy"方法之后这个对象引用计数的变化,还介绍了在MRC环境下成员变量的"set"和"get"方法是如何撰写的,还介绍了"@property"和"@synthesize"关键字的作用。
ZPMemoryLayout
本Demo主要介绍了内存中的几大区域,还介绍了Tagged Pointer的用途。
ZPMRCDevelop
本Demo是在MRC环境下写的一个小项目,用来训练在MRC环境下的开发。
ZPPerformanceOptimization_CatonAnalysis
本Demo主要介绍了在屏幕成像的过程中CPU和GPU的作用,还介绍了屏幕卡顿的原因,还介绍了如何通过CPU和GPU来减少卡顿。
ZPArchitectureDesign
本Demo主要介绍了几种常用的架构:MVC、MVC变种、MVP、MVVM,还介绍了项目可以按照界面层、业务层、数据层来进行分类,还介绍了设计模式的概念和分类。
ZPPerformanceOptimization_IPASlimming
本Demo主要介绍了如何把项目中的资源(图片、音频、视频等)、可执行文件进行优化和瘦身。
ZPPerformanceOptimization_StartOptimization
本Demo主要介绍了APP的冷启动和热启动,还介绍了如何添加环境变量来在控制台中打印出来APP的启动时间分析,还介绍了冷启动的三大阶段以及如何针对这三大阶段来进行启动优化。
ZPPerformanceOptimization_PowerOptimization
本Demo主要介绍了APP耗电的几个主要原因,还介绍了几种耗电优化的方案。
ZPCustomCopyMethod
本Demo主要介绍了当对一个对象调用"copy"方法的时候,其内部必然会先调用该对象类里面的"copyWithZone:"方法,然后生成另一个全新的对象。新对象和旧对象互不影响,即修改其中一个对象的属性值不会影响另外一个对象。
ZPKeywordCopy
本Demo主要介绍了系统自动生成的用"copy"关键字修饰的属性的"set"方法是什么样子的。
ZPDeepCopyAndShallowCopy
本Demo主要介绍了深拷贝和浅拷贝的概念。总结出的结论:1、不可变对象调用"copy"方法,得到的也是一个不可变对象,是浅拷贝;2、不管是可变对象还是不可变对象,只要调用"mutableCopy"方法,得到的都是可变对象,深拷贝。