美文网首页
一句话笔记(44)(锁)

一句话笔记(44)(锁)

作者: 天空中的球 | 来源:发表于2020-04-29 22:21 被阅读0次

    一句话笔记,某段时间内遇到或看到的某个可记录的点。

    • 自旋锁 和 互斥锁
    • setValue forkey 和 setObject forkey 区别
    • 堆栈信息无模块地址如何分析 Carsh
    • NSArray MutableCopy 子项会改变吗
    一、自旋锁 和 互斥锁
    • @synchronized 关键字加锁
    • NSLock 对象锁
    • NSConditionLock 条件锁
    • NSRecursiveLock 递归锁
    • pthread_mutex 互斥锁(C语言)
    • dispatch_semaphore 信号量实现加锁(GCD)
    • OSSpinLock 自旋锁

    pthread_mutex 表示互斥锁。互斥锁可以传入不同参数,实现递归锁pthread_mutex(recursive)。NSLock,NSCondition,NSRecursiveLock,NSConditionLock都是内部封装的pthread_mutex,即都属于互斥锁。@synchronized是NSLock的一种封装,牺牲了效率,简洁了语法。

    • 自旋锁会忙等: 所谓忙等,即在访问被锁资源时,调用者线程不会休眠,而是不停循环在那里,直到被锁资源释放锁。
    • 互斥锁会休眠: 所谓休眠,即在访问被锁资源时,调用者线程会休眠,此时cpu可以调度其他线程工作。直到被锁资源释放锁。此时会唤醒休眠线程。
    • 短的时间内获得锁,自旋锁的效率远高于互斥锁,否则会使CPU效率降低。

    OSSpinLock 表示自旋锁,从上图可以看到自旋锁的效率最高,但是现在的iOS因为优先级反转的问题,已经不安全,所以推荐使用pthread_mutex或者dispatch_semaphore

    • 死锁了解下:
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            dispatch_sync(dispatch_get_main_queue(), ^(void){
                NSLog(@"这里死锁了");
            });
        }
        return 0;
    }
    
    二、setValue forkey 和 setObject forkey区别
    setValue forKey :
    • 方法是KVC(键-值编码),方法是在NSObject对象中创建的,也就是说所有的oc对象都有这个方法,所以可以 用于任何类
    • value可以是nil,如果为nil,则自动调用removeObject forkey方法
    • key必须为string类型的
    • 取值的时候valueforkey的key如果包含@符号,则取值时会自动把@去掉,程序crash
    setObject forKey:
    • 方法是NSMutabledictionary特有的;
    • value不可以为nil,如果为nil,则程序崩溃在此;但value可以为[NSNull null],[NSNull null]为一个空对象,并不是nil;
    • Key的对象是一个id类型,并不是NSString,只不过我们经常使用NSString而已。
    • 取值的时候objectforkey的key如果包含@符号,无影响,可以正常取出该值

    笔记来源:setValue forkey 和 setObject forkey区别

    三、堆栈信息无模块地址如何分析 Carsh

    堆栈符号化还原有三种常见的方法:

    1. symbolicatecrash
    2. mac 下的 atos 工具
    3. 通过 dSYM 文件提取地址和符号的对应关系,进行符号还原

    怎么收集 Carsh 日志,如果不使用第三方:

    • 代码捕获crash,监听NSSetUncaughtExceptionHandler 和 signal 事件,可借助第三方工具KSCrash、plcrashreporte。
    • Xcode获取发布版本崩溃信息
    四、 NSArray MutableCopy 子项会改变吗

    不会, 子项地址依然不变,除非对子项再一一处理,或者进行归档处理。

    相关文章

      网友评论

          本文标题:一句话笔记(44)(锁)

          本文链接:https://www.haomeiwen.com/subject/iqktmhtx.html