- YYModel — 高性能的 iOS JSON 模型框架。
- YYCache — 高性能的 iOS 缓存框架。
- YYImage — 功能强大的 iOS 图像框架。
- YYWebImage — 高性能的 iOS 异步图像加载框架。
- YYText — 功能强大的 iOS 富文本框架。
- YYKeyboardManager — iOS 键盘监听管理工具。
- YYDispatchQueuePool — iOS 全局并发队列管理工具。
- YYAsyncLayer — iOS 异步绘制与显示的工具。
- YYCategories — 功能丰富的 Category 类型工具库。
看他的源码真的服了。
YY大神怎么能这么强,强无敌
YY大神我的偶像
“尽可能使用底层框架语言,亲力亲为的去做。”
“运用双向链表,哈希表两种数据结构的LRU淘汰算法。”
“基于Sqlite3的高性能封装。”
他就是这么一个底层的人。
我还沾沾自喜的感觉自己有生之年能追到唐巧老师级别,直到自己看到了YY大神的代码,我才知道什么叫望尘莫及。相差的太多了。
如果说国内那些夸夸而谈,写两本基础的书的作者,是我辈能够高山止仰。
那么YY大神就是超越于凡人,渡劫三清,云游在不同空间的仙人。
YYKit系列,也是我这段时间要研究的框架,不求能甚解,只愿在研究框架之时,能学YY大神的一丝一毫就足以。
YY大神的博客名叫ibireme
是一名来自国内的90后的iOS开发工程师,我钦佩YY大神的原因之一,就是因为他跟我在同一个年头,同一个时期开始学习iOS的,但是这一比,我眼泪流下来,看过大神代码,我有一种从来没学过iOS的感觉。
“我花费了大量的时间阅读和学习各种开源的代码、研究其中的实现原理、尝试自己实现相关技术、尝试在工作中使用,这使得我在 iOS 开发技术上进步很快。自学能力是很重要的。主动去研究一些优秀的开源项目、多在工作中实践和学习,这样就能逐步提升个人技术水平了。”
———ibireme
我得把这句话刻在墙上。
你们...有没有....
你们有没有你们...有没有.... “目标”
定一个小目标定一个小目标吧,超越YY大神
部分YYCache笔记
YYCache源码分析:http://www.cocoachina.com/ios/20160614/16672.html
YYCache作者blog:http://blog.ibireme.com/2015/10/26/yycache/
@interface YYCache : NSObject
// 读取当前数据库名称
@property (copy, readonly) NSString *name;
// memoryCache内存缓存,diskCache文件缓存
@property (strong, readonly) YYMemoryCache *memoryCache;
@property (strong, readonly) YYDiskCache *diskCache;
// 可通过下面三种方法来实例化YYCache对象
- (nullable instancetype)initWithName:(NSString *)name;
- (nullable instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;
+ (nullable instancetype)cacheWithPath:(NSString *)path;
// 禁止通过下面两个方式实例化对象
- (instancetype)init UNAVAILABLE_ATTRIBUTE;
+ (instancetype)new __attribute__((unavailable("new方法不可用,请用initWithName:")));
// 通过key判断是否缓存了某个东西,第二个法是异步执行,异步回调
- (BOOL)containsObjectForKey:(NSString *)key;
- (void)containsObjectForKey:(NSString *)key withBlock:(nullable void(^)(NSString *key, BOOL contains))block;
// 读--通过key读取缓存,第二个法是异步执行,异步回调
- (nullable id)objectForKey:(NSString *)key;
- (void)objectForKey:(NSString *)key withBlock:(nullable void(^)(NSString *key, id object))block;
// 增、改--缓存对象(可缓存遵从NSCoding协议的对象),第二个法是异步执行,异步回调
- (void)setObject:(nullable id)object forKey:(NSString *)key;
- (void)setObject:(nullable id)object forKey:(NSString *)key withBlock:(nullable void(^)(void))block;
// 删--删除缓存
- (void)removeObjectForKey:(NSString *)key;
- (void)removeObjectForKey:(NSString *)key withBlock:(nullable void(^)(NSString *key))block;
- (void)removeAllObjects;
- (void)removeAllObjectsWithBlock:(void(^)(void))block;
- (void)removeAllObjectsWithProgressBlock:(nullable void(^)(int removedCount, int totalCount))progress
endBlock:(nullable void(^)(BOOL error))end;
@end
.m代码中
//能在源码中看到,YYCache缓存了两份,一份在内存上,一份在文件上。
- (void)setObject:(id<NSCoding>)object forKey:(NSString *)key {
[_memoryCache setObject:object forKey:key];
[_diskCache setObject:object forKey:key];
}
- (void)setObject:(id<NSCoding>)object forKey:(NSString *)key withBlock:(void (^)(void))block {
[_memoryCache setObject:object forKey:key];
[_diskCache setObject:object forKey:key withBlock:block];
}
- (void)removeObjectForKey:(NSString *)key {
[_memoryCache removeObjectForKey:key];
[_diskCache removeObjectForKey:key];
}
- (void)removeObjectForKey:(NSString *)key withBlock:(void (^)(NSString *key))block {
[_memoryCache removeObjectForKey:key];
[_diskCache removeObjectForKey:key withBlock:block];
}
- (void)removeAllObjects {
[_memoryCache removeAllObjects];
[_diskCache removeAllObjects];
}
网友评论