ChenYilong / ChenYilong/iOSInterviewQuestions
32. objc使用什么机制管理对象内存?
- Dominant language
- Swift
- Stars
- 9.5k
- Forks
- 2.8k
- PR merge metrics
- No merged PRs in 30d
Description
32. objc使用什么机制管理对象内存?
1、通过 retainCount 的机制来决定对象是否需要释放。
2、每次 runloop 的时候,都会检查对象的 retainCount,如果retainCount 为 0,说明该对象没有地方需要继续使用了,可以释放掉了。
第2句应该这么说:
其实是每次release时候检查retainCount减一,当为0时候释放对象。
然后再说release对象的各种情况:
一、对象成员变量
1、这个对象dealloc时候,成员变量objc_storeStrong(&ivar,nil) release
二、局部变量变量的释放
分情况:
1、strong obj变量,出了作用域{},就objc_storeStrong(obj,nil) release对象;
void
objc_storeStrong(id *location, id obj)
{
id prev = *location;
if (obj == prev) {
return;
}
objc_retain(obj);
*location = obj;
objc_release(prev);
}
2、weak obj变量,出了作用域,objc_destroyWeak 将变量(obj)的地址从weak表中删除。;
3、autorelease obj变量,交给autoreleasepool对象管理,
(1)主动使用@autoreleasepool{},出了{} 对象release
(2)不使用@autoreleasepool{},交给线程管理
①线程开启runloop,在每次kCFRunLoopBeforeWaiting休眠时候,执行PoolPop(release对象)再PoolPush,
②线程没有开启runloop,在线程介绍时候执行PoolPop(release对象)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.