ios 开发

iOS内存管理(四)ARC下__strong 和 __weak源

2020-12-22  本文已影响0人  iOS小洁

ARC下__strong 和 __weak源码主要流程分析

一、_strong

void objc_storeStrong(id *location, id obj)
{
    id prev = *location;
    if (obj == prev) {
        return;
    }
    objc_retain(obj);
    *location = obj;
    objc_release(prev);
}
1.1 objc_retain过程
1.2 objc_release 过程
1.3 retainCount流程

二、__weak

id objc_initWeak(id *location, id newObj) {
    if (!newObj) {
        *location = nil;
        return nil;
    }
    return storeWeak<DontHaveOld, DoHaveNew, DoCrashIfDeallocating>
        (location, (objc_object*)newObj);
}
void objc_destroyWeak(id *location) {
    (void)storeWeak<DoHaveOld, DontHaveNew, DontCrashIfDeallocating>
        (location, nil);
}
2.1、storeWeak流程
函数定义
template <HaveOld haveOld, HaveNew haveNew, CrashIfDeallocating crashIfDeallocating>
static id storeWeak(id *location, objc_object *newObj)
2.2、weak_register_no_lock流程
2.3、weak_unregister_no_lock流程
上一篇 下一篇

猜你喜欢

热点阅读