博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于weak 关于KVO
阅读量:6343 次
发布时间:2019-06-22

本文共 2034 字,大约阅读时间需要 6 分钟。

weak singleton

+ (id)shareInstance {    static __weak ASingletonClass *instance;    ASingletonClass *strongInstance = instance;    @synchronized(self) {        if (strongInstance == nil) {            strongInstance = [[[self class] alloc] init];            instance = strongInstance;        }    }    return strongInstance;}复制代码

weak associated object

- (void)setContext:(CDDContext *)object {    id __weak weakObject = object;    id (^block)() = ^{
return weakObject; }; objc_setAssociatedObject(self, @selector(context), block, OBJC_ASSOCIATION_COPY);}- (CDDContext *)context { id (^block)() = objc_getAssociatedObject(self, @selector(context)); id currentContext = (block ? block() : nil); return currentContext;}复制代码

KVO

Father
// .h#import 
@interface Father : NSObject- (void)methodToBeInherit;@end// .m#import "Father.h"@implementation Father- (void)methodToBeInherit { NSLog(@"Father Log");}@end复制代码
Son
// .h#import "Father.h"@interface Son : Father- (void)methodToBeInherit;@end// .m#import "Son.h"@implementation Son- (void)methodToBeInherit {//    [super methodToBeInherit];        struct objc_super superInfo = {        .receiver = self,        .super_class = class_getSuperclass(object_getClass(self))    };        void (*objc_msgSendSuperMethod)(void *, SEL) = (void *)objc_msgSendSuper;        objc_msgSendSuperMethod(&superInfo, _cmd);        NSLog(@"Son Log");}@end复制代码
Son *son = [[Son alloc] init];[son methodToBeInherit];复制代码

结果如下:

假如现在我们想要实现上述结果,但是不是用son,而是Father呢?如何实现?

// .h#import 
@interface NSObject (Hook)- (void)isaSwizzingMethod;@end// .m#import "NSObject+Hook.h"#import "Son.h"#import
@implementation NSObject (Hook)- (void)isaSwizzingMethod { Class newClass = [Son class]; object_setClass(self, newClass);}@end复制代码
Father *father = [[Father alloc] init];[father isaSwizzingMethod];    [father methodToBeInherit];复制代码

结果如下:

惊不惊喜,意不意外。

面向切面编程框架Aspects中有更多实现细节,感兴趣的可以去github下载demo一饱眼福。

转载于:https://juejin.im/post/5b5462bb518825631e21b903

你可能感兴趣的文章
flutter 教程(一)flutter介绍
查看>>
CSS面试题目及答案
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-Arrays(数组)
查看>>
每周记录(三)
查看>>
Spring自定义注解从入门到精通
查看>>
笔记本触摸板滑动事件导致连滑的解决方式
查看>>
Android推荐常用的31个库
查看>>
Runtime 学习:消息传递
查看>>
你了解BFC吗?
查看>>
深入V8引擎-默认Platform之mac篇(1)
查看>>
linux ssh tunnel使用
查看>>
十、详解FFplay音视频同步
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
小猿圈Python教程之全面解析@property的使用
查看>>
mpvue开发小程序所遇问题及h5转化方案
查看>>
View和Activity的生命周期
查看>>
解决PHP下载大文件失败,并限制下载速度
查看>>
java B2B2C Springcloud电子商城系统—Feign实例
查看>>
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>