
iOS 快速进阶
文章平均质量分 84
iOS的类,底层实现分析,开发原理相关,线程安全锁,技能进阶与思考
Z苗
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内存管理——NSTimer循环引用讲解
NSTimer循环引用例子循环引用代码@interface ViewController ()@property (strong, nonatomic) NSTimer *timer;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // [NSRunLoop currentRunLoop] 对 timer 的强持有 self.timer = [NST原创 2021-07-25 14:11:50 · 532 阅读 · 0 评论 -
继承与多态
前言面向对象语言的一个很大的特点就是采用了封装,继承和多态等设计方法,使我们可以用现实描述对象和事务的方式来封装成类,不仅可以使数据结构更加清晰明了,还能够提高代码的重用性,通过继承和多态等形式还可以增强对象的灵活性和扩展性。继承对于继承我们创建的类都要继承与NSObject,或者子类,子类继承某一个类,就可以直接使用或者重写父类的方法和属性。例如创建一个UIView 的子类就可以使用-initWithFrame:的初始化方法,或者重写它。创建一个UIViewController的子类就有一个Vi原创 2021-07-17 09:02:52 · 459 阅读 · 0 评论 -
KVC的深层讲解
1. 谈谈你对KVC的理解KVC可以通过 key直接访问对象的属性给对象属性赋值运行时动态的访问或修改对象的属性底层执行机制如下以[self setValue:@“小明” forKey:@“name”];这句代码作为例子进行说明。1.程序优先调用setKey:属性方法,代码通过setter方法完成设置。注意这里的Key是指成员变量名,首字母大小写要符合KVC命名规范2.如果没有找到setName:方法KVC机制会检查+(BOOL)accessInstanceVariablesDi原创 2021-07-15 12:54:25 · 2019 阅读 · 1 评论 -
初始化讲解
在Objective-C,创建一个对象是通过alloc和init两部来实现的,alloc是为改对象分配内存空间,init才是真正将对象创建为实例。可以理解为 alloc是按照改类的数据结构,在内存中开辟出相应的大小并设置引用计数为1,最后通过init才真正完成初始化的操作。所以通过alloc 创建的对象虽然为instancetype,确是不可用的,所以我们自定义初始化方法,一般不会区重写alloc,而是通过重写init方法,或者自定义一些初始化init方法。在自定义的初始化方法中,为了保证实例被真正创建,原创 2021-07-12 17:55:00 · 1018 阅读 · 0 评论 -
内存管理(内存布局,引用计数,自动释放池)
这里所说的内存,并非内存管理,是其他系统以及编程语言都有提及的你内存分区,是对编程语言来说比较广泛的内存说明。栈区堆区全局区常量区代码区我们知道任何一个程序在运行的时候实际是运行在内存中的,这个内存也就是我们通常所说的主存,也叫运行内存,也叫RAM,是直接与CPU进行交换数据内部储存器,内存读取速度很快,所以作为操作系统运行程序的区域。不同的分区保存不同的值,值可以为指针,也可以为对象,也可以为二进制代码。可以为数字等,每个分区都有自己的功能,它们一起协作作为系统提供更好的任务划分。.原创 2021-07-12 17:04:12 · 968 阅读 · 5 评论 -
1.4 黑魔法
在实例项目开发中,经常需要通过runtime 来给类的类方法或实例方法做交换,从而达到不用修改原类的代码就可以给原类中特定的方法做替换操作。虽然这只是runtime 的其中一个功能,但可以用来做很多事情。...原创 2021-06-26 13:36:20 · 1829 阅读 · 0 评论 -
1.3 类属性
我们知道,在实例方法中,self指的是类实例,而在类方法中, self指的是类,而不是类实例,一般情况下也是可以直接将self换成类名来调用。类实例是由类名来创建的,那类是怎么来的呢,类都是源自于一个叫元类。类可以看做其元类的实例,与此同时,我们再看objc 对象对应的结构体。struct objc_class {Class isa; // 指向所属类的指针(_Nonnull)Class super_class; // 父类const char *name; // 类名(_Nonnull)原创 2021-06-26 13:32:08 · 718 阅读 · 0 评论 -
RunLoop的实际应用
解决NSTimer在滑动时停止工作的问题原创 2021-06-24 16:28:45 · 1063 阅读 · 0 评论 -
iOS底层原理 RunLoop
什么是RunLoop从字面意思来看,就是运行循环的意思,其实就是在程序运行过程中循环做一些事情RunLoop的应用范畴定时器(Timer)、PerformSelector- GCD Async Main Queue- 事件响应、手势识别、界面刷新- 网络请求- AutoreleasePool在main函数中,如果没有RunLoop,那么下面代码执行完第三行后就会退出程序int main(int argc, char * argv[]) { @autoreleasepool {原创 2021-06-23 18:28:20 · 964 阅读 · 0 评论 -
1.2 类方法的self
引用上一篇文章,下面通过allocz 和initWithName的方式来创建Person对象原创 2021-06-19 11:50:48 · 714 阅读 · 0 评论 -
1.1 创建并描述一个类
1.1 创建并描述一个类开发经常需要创建类文件,可以说在项目开发过程中,很大一部分是由类组成的,要在Object-C创建一个类,需要继承NSObject或者子类,NSObject以及子类就是Object-C语言对象的实现。打开NSObject 的定义,可以看到其头文件中仅有一百多行代码,及定义了对象及其本方法。@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY;}NSObject 其实是实现了同原创 2021-06-19 11:45:18 · 1133 阅读 · 0 评论