12 2019 档案

摘要:下面来实现KVO自动销毁:(在合适的时候,自动移除观察者) @implementation NSObject (FXKVO) - (void)dealloc{ //指回父类 Class superClass = [self class];//KVOStudent object_setClass(se 阅读全文
posted @ 2019-12-31 21:55 do+better 阅读(189) 评论(0) 推荐(0)
摘要:系统dealloc中做了什么事情? 移除观察者之前打印: 移除观察者,isa指针指回原来的类,动态生成的子类不知道是否会消失?打印下: (防止isa的影响,在动态方法解析的时候,要判断class.isa 是否为 metal class,类的isa不一定指向metal,有可能指向kvo动态子类,所以是 阅读全文
posted @ 2019-12-23 17:25 do+better 阅读(321) 评论(0) 推荐(0)
摘要:1. 不调用实例变量的方法 2. 动态生成子类 (利用runtime生成:申请类,添加一些方法-set-class等方法,注册类 ) ****常量类型不能添加观察者 #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interfac 阅读全文
posted @ 2019-12-21 19:57 do+better 阅读(314) 评论(0) 推荐(0)
摘要:官方文档地址: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html 基本用法: 1. [self.student add 阅读全文
posted @ 2019-12-18 12:02 do+better 阅读(375) 评论(0) 推荐(0)
摘要:load方法什么时候调用? method Swizzling 为什么要放在load方法里面? /*********************************************************************** * _objc_init * Bootstrap initi 阅读全文
posted @ 2019-12-17 21:15 do+better 阅读(340) 评论(0) 推荐(0)
摘要:iOS中使用了很多散列表: allocatedClasses = NXCreateHashTable(NXPtrPrototype, 0, nil); 阅读全文
posted @ 2019-12-16 12:12 do+better 阅读(297) 评论(0) 推荐(0)
摘要:头文件:#include <string.h>memmove() 用来复制内存内容,其原型为: void * memmove(void *dest, const void *src, size_t num);memmove() 与 memcpy() 类似都是用来复制 src 所指的内存内容前 num 阅读全文
posted @ 2019-12-16 11:32 do+better 阅读(728) 评论(0) 推荐(0)
摘要:1. 分类和类定义相同的方法,会不会覆盖类方法: #import "FXPerson.h" @implementation FXPerson - (void)walk{ NSLog(@"person walk"); } @end #import "FXPerson+something.h" @imp 阅读全文
posted @ 2019-12-16 10:57 do+better 阅读(413) 评论(0) 推荐(0)
摘要:+ (instancetype)yy_modelWithDictionary:(NSDictionary *)dictionary { if (!dictionary || dictionary == (id)kCFNull) return nil; if (![dictionary isKindO 阅读全文
posted @ 2019-12-15 16:26 do+better 阅读(499) 评论(0) 推荐(0)
摘要:KVC 为核心方法,闭源,没有源码,只能猜测。为了方便理解,自己根据官方文档的描述,实现了一个简单的KVC,所以是不安全的,只作为理解学习使用。(在导入第三方框架的时候,需要考虑是否有导入的必要性,权衡利弊) KVC官方文档 https://developer.apple.com/library/a 阅读全文
posted @ 2019-12-12 10:18 do+better 阅读(499) 评论(0) 推荐(0)
摘要:枚举的基本用法 enum Direction { case north case south case east case west } enum Direction { case north, south, east, west } var dir = Direction.west dir = D 阅读全文
posted @ 2019-12-08 19:05 do+better 阅读(411) 评论(0) 推荐(0)
摘要:函数 func pi() -> Double{ return 3.14 } func sum(v1: Int, v2: Int) -> Int { return v1 + v2 } sum(v1: 10, v2: 20) 形参默认是let,也只能是let 无返回值 func sayHello() - 阅读全文
posted @ 2019-12-08 11:16 do+better 阅读(293) 评论(0) 推荐(0)
摘要:if-else let age = 4 if age >= 22 { print("Get married") } else if age >= 18 { print("Being a adult") } else if age >= 7 { print("Go to school") } else 阅读全文
posted @ 2019-12-07 13:18 do+better 阅读(244) 评论(0) 推荐(0)
摘要:常量 只能赋值一次 let age: Int age = 20 它的值不要求在编译时确定,但使用之前必须赋值一次 var num = 10 num += 20 num += 30 let age2 = num func getAge() -> Int{ return 10 } let age = g 阅读全文
posted @ 2019-12-07 09:03 do+better 阅读(241) 评论(0) 推荐(0)
摘要:——瓦列里·毕加索夫于1988年4月26日自杀身亡 享年51岁,当天正是切尔诺贝利核泄漏时间两周年, 列加索夫的回忆录音带在苏联科学界流传开来,他的自杀让这些录音带无法被无视。 成为科学家就是成为天真的人. To be a scientist is to be native. 我们一心扑在寻找真相上 阅读全文
posted @ 2019-12-05 20:08 do+better 阅读(397) 评论(0) 推荐(0)