解决循环引用问题

KVC
key:只能访问当前对象的属性
keyPath:包含了key的功能,能利用运算符一层一层的往内部访问属性
KVO:监听对象属性的改变
栈内存不区分强指针和弱指针。在栈内存中,只要大括号销毁,内存也随之销毁。在对空间,分强指针和弱指针。在栈内存中相当于浅copy在对空间中相当于深copy
1> 如果没有对block进行copy操作,block就存储与栈空间
2> 如果对block进行copy操作,block就存储与堆空间
3> 如果block存储于栈空间,不会对block内部所用到的对象产生强引用
4> 如果block存储与堆空间,就会对block内部所用到的对象产生强引用
对于block一般实用copy属性,但为了防止block的循环引用问题,需要创建完block以后,对其进行__weak操作弱化
循环引用其实就是相互调用,产生死循环,导致内存无法释放
解决循环引用:
非ARC(MRC)__block
ARC:__weak\__unsafe_unretained
eg:(ARC情况下)
JLPerson *p = [[JLPerson alloc] init];
__weak typeof(p) weakP = p;
p.testBlock = ^{
     [weakP run];
};

转载于:https://www.cnblogs.com/yuanjunliang/articles/4567796.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值