YYCache知识点


/**

A linked map used by YYMemoryCache.

It's not thread-safe and does not validate the parameters.

Typically, you should not use this class directly.

*/

@interface _YYLinkedMap : NSObject {
    @package
    CFMutableDictionaryRef _dic; // do not set object directly
    NSUInteger _totalCost;
    NSUInteger _totalCount;
    _YYLinkedMapNode *_head; // MRU, do not change it directly
    _YYLinkedMapNode *_tail; // LRU, do not change it directly
    BOOL _releaseOnMainThread;
    BOOL _releaseAsynchronously;
}

延迟执行:

void
dispatch_after(dispatch_time_t when,
    dispatch_queue_t queue,
    dispatch_block_t block);

时间相关

dispatch_time_t
dispatch_time(dispatch_time_t when, int64_t delta);
#define NSEC_PER_SEC 1000000000ull
#define USEC_PER_SEC 1000000ull
#define NSEC_PER_USEC 1000ull

NSEC:纳秒(nanosecond)
USEC:微秒(microsecond)
SEC:秒(second)
PER:每(percent)

    1   NSEC_PER_SEC,每秒有多少纳秒。
    2   USEC_PER_SEC,每秒有多少微秒。
    3   NSEC_PER_USEC,每微秒有多少纳秒。

NSDate 、CFAbsoluteTimeGetCurrent、CACurrentMediaTime 的差异

框架层:
NSDate 属于Foundation
CFAbsoluteTimeGetCurrent() 属于 CoreFoundatio
CACurrentMediaTime() 属于 QuartzCore
本质区别:
NSDate 或 CFAbsoluteTimeGetCurrent() 返回的时钟时间将会会网络时间同步,从时钟 偏移量的角度,mach_absolute_time() 和 CACurrentMediaTime() 是基于内建时钟的,能够更精确更原子化地测量,并且不会因为外部时间变化而变化(例如时区变化、夏时制、秒突变等),但它和系统的uptime有关,系统重启后CACurrentMediaTime()会被重置。

常见用法:
NSDate、CFAbsoluteTimeGetCurrent()常用于日常时间、时间戳的表示,与服务器之间的数据交互

其中 CFAbsoluteTimeGetCurrent() 相当于[[NSDate data] timeIntervalSinceReferenceDate];

CACurrentMediaTime() 常用于测试代码的效率

https://cnbin.github.io/blog/2016/03/21/nsdate-,-cfabsolutetimegetcurrent,-cacurrentmediatime-de-chai-yi/


既然设置了ARC,为什么还要使用@autoreleasepool
用@autoreleasepool是有用的。

正常情况下,你创建的变量会在超出其作用域的时候被释放掉。

而如果你的函数写的很长,在你函数运行过程中出现很多中间变量,占据了大量的内存,怎么办?

用@autoreleasepool。

在@autoreleasepool中创建的变量,会在@autoreleasepool结束的时候执行一次release,进行释放。其实@autoreleasepool就相当于一层作用域。
https://cnbin.github.io/blog/2016/03/21/ji-ran-she-zhi-liao-arc,wei-shi-yao-huan-yao-shi-yong-at-autoreleasepool/


字符串格式化的深入理解了一点

    printf("NSDictionary:%8.2f\n", time * 1000);
    printf("NSDictionary:%15.2f\n", time * 1000);
    printf("NSDictionary:%8s\n", "abc");
    printf("NSDictionary:%15s\n", "abc");
    printf("NSDictionary:%15s\n", "abcdef");
    
    
    NSLog(@"NSDictionary:%8.2f\n", time * 1000);
    NSLog(@"NSDictionary:%15.2f\n", time * 1000);
    NSLog(@"NSDictionary:%8@\n", @"abc");
    NSLog(@"NSDictionary:%15@\n", @"abc");
    NSLog(@"NSDictionary:%15@\n", @"abcdef");

输出:

NSDictionary:   53.63
NSDictionary:          53.63
NSDictionary:     abc
NSDictionary:            abc
NSDictionary:         abcdef
2018-04-19 15:01:03.851864+0800 CacheBenchmark[4702:2623265] NSDictionary:   53.63
2018-04-19 15:01:03.851908+0800 CacheBenchmark[4702:2623265] NSDictionary:          53.63
2018-04-19 15:01:03.851933+0800 CacheBenchmark[4702:2623265] NSDictionary:     abc
2018-04-19 15:01:03.851944+0800 CacheBenchmark[4702:2623265] NSDictionary:            abc
2018-04-19 15:01:03.851953+0800 CacheBenchmark[4702:2623265] NSDictionary:         abcdef

上面是右对齐, 左对齐的可以在数字前面加一个 "-"
https://blog.csdn.net/siemenliu/article/details/7852138


define 宏定义的高级用法

#define INIT(...) self = super.init; \
if (!self) return nil; \
__VA_ARGS__; \
if (!_dic) return nil; \
_lock = OS_SPINLOCK_INIT; \
return self;

#define LOCK(...) OSSpinLockLock(&_lock); \
__VA_ARGS__; \
OSSpinLockUnlock(&_lock);


- (instancetype)init {
    INIT(_dic = [[NSMutableDictionary alloc] init]);
}

- (NSUInteger)count {
    LOCK(NSUInteger c = _dic.count); return c;
}



iOS 中生成随机数的4种方法(rand、random、arc4random、arc4random_uniform)

iOS 有如下四种随机数方法,下面以产生 [0,100) 的随机数为例:

1. srand((unsigned)time(0));  //不加这句每次产生的随机数不变
    int i = rand() % 100; 
2. srandom(time(0));
    int i = random() % 100;
3. int i = arc4random() % 100;
4. int i = arc4random_uniform(100)

注:rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。
arc4random()和arc4random_uniform(u_int32_t)是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是rand()的两倍。
在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()或arc4random_uniform(u_int32_t)返回的最大值则是 0x100000000 (4294967296)。
精确度比较:arc4random_uniform(u_int32_t) = arc4random() > random() > rand()。
https://blog.csdn.net/chy555chy/article/details/51738128


异步到指定的队列中释放对象:

        _YYLinkedMapNode *node = [_lru removeTailNode];
        if (_lru->_releaseAsynchronously) {
            dispatch_queue_t queue = _lru->_releaseOnMainThread ? dispatch_get_main_queue() : YYMemoryCacheGetReleaseQueue();
            dispatch_async(queue, ^{
                [node class]; //hold and release in queue
            });
        } else if (_lru->_releaseOnMainThread && !pthread_main_np()) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [node class]; //hold and release in queue
            });
        }

LRU算法 least recently used 算法
最少最近使用算法


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容