- 博客(24)
- 收藏
- 关注
原创 _ _ block的内存管理
当block在栈上时,并不会对_ _ block变量产生强引用当block被copy到堆时会调用block内部的copy函数copy函数内部会调用_Block_object_assign函数_Block_object_assign函数会对_ _ block变量形成强引用(retain)当block从堆中移除时会调用block内部的dispose函数dispose函数内部会调用_Block_object_dispose函数_Block_object_dispose函数会
2022-01-18 18:59:46
531
原创 面试题-Block
block的原理是怎么样的? 本质是什么?封装了函数调用以及调用环境的OC对象__block 的作用是什么? 有什么使用注意点?block的属性修饰符为什么是copy? 使用block有哪些使用注意?block一旦没有进行copy操作,就不会在堆上使用注意:循环引用的问题block在修改NSMutableArray,需不需要添加__block?block本质上也是一个OC对象,它内部也有个isa指针block是封装了函数调用以及函数调用环境的OC对象block的底层结构如
2022-01-18 17:48:47
164
原创 思考:如何实现给分类“添加成员变量”? objc_AssociationPolicy的原理
默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联对象来间接实现关联对象提供了以下API添加关联对象void objc_setAssociatedObject(id object, const void * key, id value, objc_AssociationPolicy policy)获得关联对象id objc_getAssociatedObject(id object, const void * key)移除所有的关联对象void ob
2022-01-18 12:27:54
290
原创 category的面试题和底层结构
Category的使用场合是什么?Category的实现原理Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)Category和Class Extension的区别是什么?Class Extension在编译的时候,它的数据就已经包含在类信息中Category是在运行时,才会将数据合并到类信息中Categ
2022-01-18 12:18:33
136
原创 RunLoop对象与线程
iOS中有2套API来访问和使用RunLoop1.Foudation: NSRunLoop2.Core Foudation:CFRunLoopRefNSRunLoop和CFRunLoopRef都代表着RunLoop对象NSRunLoop是基于CFRunLoopRef的一层OC包装CFRunLoopRef是开源的https://opensource.apple.com/tarballs/CF/每条线程都有唯一的一个与之对应的RunLoop对象RunLoop保存在一个全局
2022-01-18 11:58:41
248
原创 什么是RunLoop
顾名思义运行循环在程序运行过程中循环做一些事情应用范畴定时器(Timer)、PerformSelectorGCD Async Main Queue事件响应、手势识别、界面刷新网络请求AutoreleasePool如果没有RunLoop如果有了RunLoop...
2022-01-18 11:37:29
1732
原创 KVC笔记
KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性常见的API有- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;- (void)setValue:(id)value forKey:(NSString *)key;- (id)valueForKeyPath:(NSString *)keyPath;- (id)valueForKey:(NSString *)key;.
2022-01-17 23:26:07
1135
原创 KVO、KVC的面试题
iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类当修改instance对象的属性时,会调用Foudation的_NSSetXXXValueAndNotify函数willChangeValueForKey:父类原来的setterdidChangeValueForKey:内部会触发监听器(Oberser)和监听方法(observeValueForKeyPath:ofObject:
2022-01-17 23:20:37
641
原创 KVO的笔记
KVO的全称是Key-Value Observing, 俗称“键值监听”,可以用于监听某个对象属性值的改变未使用KVO监听的对象使用了KVO监听的对象,创建了子类,instance对象的isa指针指向新的子类_NSSet*ValueAndNotify的内部实现调用willChangeValueForKey:调用原来的setter实现调用didChangeValueForKey:didChangeValueForKKey:内部会调用observer的observe.
2022-01-17 23:05:06
1386
原创 OC关于isa指针的一些总结
instance的isa指向class当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用class的isa指向meta-class当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用class对象的superclass指针当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class...
2022-01-17 21:53:23
152
原创 meta-class的记录
objectMetaClass是NSObject的meta-class对象(元类对象)每个类在内存中有且只有一个meta-class对象meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括isa指针superclass指针类的类方法信息(class method).........
2022-01-17 21:47:36
121
原创 Class的记录
objectClass1~objectClass5都是NSObject的class对象(类对象)它们是同一个对象。每个类在内存中有且只有一个class对象class对象在内存中存储的信息主要包括isa指针superclass指针类的属性信息(@property)、类的对象方法信息(insatnce method)类的协议信息(protocol)、类的成员变量信息(ivar).........
2022-01-17 21:39:52
194
原创 OC对象的本质
我们平时编写的Objective-C代码,底层实现其实都是C\C++代码Objective-C中的对象,简称OC对象,主要可以分为3种1.instance对象(实例对象)2.class对象(类对象)3.meta-class对象(元类对象)一个NSObject对象占用多少内存?系统分配了16字节给NSObject对象(通过malloc_size函数获得)但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_get...
2022-01-17 21:02:37
1151
原创 synthesize关键字的说明
iOS6之后LLVM编译器引入了property autosynthesis, 即属性自动合成。换句话说,就是编译器会为每个@property添加@synthesze, 如以下形式 :@synthesize propertyName = _propertyName;这行代码会创造一个带下划线的实例变量名,同时使用这个属性生成getter和setter方法。使用@synthesize 只有一个目的-给实例变量起个别名,或者说为同一个变量添加两个名字。如果要阻止自动合成,记得使用@dynamic
2021-05-11 17:21:57
302
原创 近期flutter开发整理的一些资料
最近flutter项目开发,整理一下有用的资料,学习资料网站主要有1.fluuter中文网https://flutterchina.club,这个是官方网站 2.技术胖自己出版的视频网站https://www.jspang.com3.还有https://www.yuque.com/ericlee/flutter/start这个网站是文字记录,flutter开发原生插件有相关的资料,后面打算针对插件开发再记录一些东西。记录下自己项目遇到的一些问题: 1.自己写各种组建时,每两个组件的c...
2020-11-17 15:59:32
285
原创 MacApp打包公正以及pkg安装包的签名
Mac app 的签名和pkg包的Notarizition(公证)参考的简书 https://www.jianshu.com/p/a1a672b49d78 https://blog.youkuaiyun.com/ftpleopard/article/details/102721138主要步骤1.codesign app—> 2.productsign pkg—> 3.send to apple server —> 4.get a uuid->add ticket第一步code.
2020-10-10 17:54:02
2763
1
原创 利用UIBezierPath和@"strokeEnd",@"strokeStart"绘制tabbar动画样式的选中
自己项目中自定义的UITabbar,选中后有路径的过度,效果图为动画实现的核心代码为1.第一步 [animationPath addArcWithCenter:center1 radius:RADIUS startAngle:M_PI_2-0.001 endAngle:M_PI*2+M_PI_2 clockwise:clockwise]; [animationPath a...
2019-06-11 19:12:56
432
原创 iOS开发中用到的判断字符串是否为空的方法
NSString 类别集成方法为@interface NSString (Empty)+ (BOOL)isEmpty:(NSString *)string;@end@implementation NSString (Empty)+ (BOOL)isEmpty:(NSString *)string{if ([[string class] isSubclassOfCl...
2019-06-11 16:26:41
396
原创 GPUImage进行滤镜拍照
# GPUImageTest利用GPUImage进行滤镜拍照拍摄照片时的效果图为# 初始化/// 录制相机@property(nonatomic, strong)GPUImageStillCamera *camera;/// 过滤的视图@property(nonatomic, strong)GPUImageView *preView;[self.view insertSubv...
2019-06-11 15:38:01
394
原创 iOS 银联支付操作记录
1.个人做银联支付问题主要是控制器在默认工程下要改为.mm2.以及在bulld settting中没有添加-ObjC导入静态库的类导致调起崩溃。附上银联支付的文档,按照文档操作即可https://open.unionpay.com/ajweb/help/file/techFile?productId=3...
2018-08-07 11:49:14
412
原创 个人oc项目遇到的一些坑
1.afnetworking使用的一些坑 AfhttpRequestSerialization 请求方式默认是二进制的。 2.响应数据格式 AFURLResponseSerialization 默认响应格式AFJSONResponseSerializer 3.接收数据的格式也是有限制的,通过查看框架的源码可以看到它默认可以有哪些数据类型,// text/html 就是需要额外添加的数据类型 man...
2018-08-01 17:46:46
453
原创 GCD定时器的学习记录
GCD定时器精确度高,不必受Nsrunloop各种mode的影响dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());/// 用DISPATCH_now系统休眠时,不进行计时 dispatch_walltime(NULL, 0...
2018-07-26 10:33:26
309
原创 运用swift的拓展写CADisplayLink的一个定时器,实现定时器与控制器的同步销毁
swift的定时器拓展 代码中运用到了runtime的属性绑定 核心代码为extension CADisplayLink { // RunTime绑定的键值 struct UnSafePointString { static let key = UnsafeRawPointer(bitPattern: "closures".hashValue) ...
2018-07-17 11:40:02
763
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人