- 博客(15)
- 资源 (10)
- 收藏
- 关注
原创 YY_学习01
typeof 关键字是用来定义变量数据类型的在GNU C 中支持直接写 typeof() 或者 __typeof() 或者 __typeof__() iOS 使用Clang编译器,默认用的C语言版本是GNU99 ,并且允许'asm'inline''typeof'的选项设置为Yes。#define debug(format, args...) fprintf (stderr, format, arg...
2018-03-21 14:43:10 241
原创 TCP为什么是三次握手
https://www.zhihu.com/question/24853633【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报...
2018-03-20 14:59:18 236
原创 面试3
load和initialize共同点1.开发不主动调用情况下,系统最多调用1次2.父类和子类都被调用,父类调用一定在子类前load1.load方法不需要写明[super load] 父类就会收到调用, 并在子类之前initialize1.第一次主动使用当前类2.线程安全3.子类会把父类的实现继承过来调用一遍, 不需要调用superUIVIew和CALayer关系UIView是CALayer的del...
2018-03-19 17:32:33 233
原创 经典面试2
为什么要放在一起写?因为alloc和init有可能返回不同的对象层和UIView的区别是什么?图层不会直接渲染到屏幕上, UIView更像是一个CALayer的管理器, 一个UIView上可以有n个CALayer, 每个layer显示一种东西,增强UIView的展现能力pch文件的作用.pch来自外部框架的头文件列表, 减少在选择Build或Build and Go时编译项目的时间awakeFro...
2018-03-19 15:58:56 192
原创 能否添加实例变量, 手动触发KVO
能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?不能向编译后得到的类中增加实例变量能向运行时创建的类中添加实例变量编译后的类已经在runtime中,类结构的objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime也处理strong weak引用, 所以不能向存在的类中添加实例变量运行时创建的类是可以添加实例变量的,...
2018-03-19 10:48:53 462
原创 weak实现原理, 及内存管理原理
内存管理原理两张表1.引用计数表 (引用计数值, 是否为弱引用)2.引用地址表当对象将要被销毁时, 判断是否为弱引用, 有弱引用遍历弱引用地址列表设置为nil执行销毁操作 Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象指针的地址...
2018-03-14 15:23:14 682
原创 iOS消息转发
消息转发过程1.动态方法解析 @dynamic 实现setter getter声明, 动态添加一个方法resolveInstanceMethod:2.快速消息转发forwardingTargetForSelector:3.标准消息转发methodSignatureForSelector:forwardInvocation:- (NSMethodSignature *)methodSignature...
2018-03-14 15:11:04 350
原创 iOS中实现单例
在类的内部提供一个static修饰的全局变量static SingletonVC * _singletonVC;;提供一个类方法方便外界访问+ (instancetype)share;;重写initWithZone方法,保证永远只为单例分配一次存储空间。...
2018-03-14 14:17:32 514
原创 自动释放池
autorelease本质上就是延迟调用release方法autorelease对象什么时候释放?引用计数为0的时候才会释放, 不是出了pool就释放在一些很消耗内存的循环调用的场景下有时需要手动干预autoreleased对象的释放时机, 不然会导致内存暴增, 最终导致程序崩溃NSThread和NSRunLoop是一一对应的关系在NSRunLoop对象的每个运行循环开始前,系统会自动创建一个au...
2018-03-13 15:02:32 785
原创 __strong修饰符
在ARC环境下, 我们常常会使用weak的修饰符来修饰一个变量, 防止其在block中被循环引用, 但在特殊情况下,我们在block中又使用strong来修饰这个在block外刚刚用__weak修饰的变量在block中需要对weakSelf进行strong, 保证代码在执行到block中,self不会被释放, 当block执行完后, 会自动释放该strongSelf当加上修饰符strong时, 当...
2018-03-12 17:28:39 895
原创 字符串为什么使用copy不使用strong
NSMutableString * name = [[NSMutableString alloc] initWithString:@"xiaoming"]; Person * p = [Person new]; p.name = name; NSLog(@"name is %@", p.name); [name appendString:@"123"]; NS...
2018-03-12 10:40:11 370
原创 KVC KVO实现原理
KVO是Objective-C对观察者设计模式的一种实现指定一个被观察的对象, 当对象的某个属性发生改变时, 对象会获得通知当观察某对象A时, KVO机制动态创建一个对象A当前类的子类, 并为这个新的子类重写被观察属性keyPath的setter方法.setter方法随后负责通知观察对象属性的改变状况1. 被观察对象的isa指针从指向原来的A类,被KVO机制修改为指向系统新创建的_A类,来实现当前...
2018-03-12 10:07:20 368
原创 使用atomic一定是线程安全的吗
使用atomic一定是线程安全的吗atomic所说的线程安全只是能保证了getter和setter存取方法的线程安全@property(atomic, strong) NSMutableArray *arr;
2018-03-05 15:36:01 2014
原创 线程池
iOS下如何实现指定线程数目的线程池?线程? 线程池? - -||| 又是一脸懵逼?分析:NSThread NSOperation GCD可以把NSOperationQueue看做一个线程池, 可往线程池中添加NSOperation到队列中可以控制线程依赖, 可以控制线程池的并发数Dispatch Queue的内存管理...
2018-03-02 14:55:54 294
原创 锁
谈下iOS开发中知道的哪些锁? 哪个性能最差?SD和AFN使用的哪个? 一般开发中你最常用哪个? 哪个锁apple存在问题又是什么问题?iOS开发中11种锁以及性能对比Data race: 当至少有两个线程同时访问一个变量, 至少有一个是写操作时, 就发生Data race例: 两个线程同时执行counter++ 产生数据竟跑, 造成的最终值为1load [%counter], rax; // 线...
2018-03-02 11:43:52 208
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人