新建线程中run loop的autorelease池

本文揭示了关于iOS线程中自动释放对象的误解,并通过实例展示了实际行为与网上流传信息之间的差异,强调亲自动手验证的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“我们每个新建的线程都会有一个默认的run loop,当这个线程被创建之后,会自动生成一个autorelease池,这个池会在run loop结束时释放,这个池是系统生成,我们无法操控,所以不进行其他retain或者copy操作的话,在线程中自动释放的对象的只存在于该线程本身,而ios这样的设计也很符合逻辑”


完全是骗人的,如果我们自己不创建autorelease pool的话,如果线程中有自动释放的对象,log中会打印类似

TestNSTimerRunloop[3663:5d03] *** __NSAutoreleaseNoPool(): Object 0x4b23760 of class __NSDate autoreleased with no pool in place - just leaking
TestNSTimerRunloop[3663:5d03] *** __NSAutoreleaseNoPool(): Object 0x8a02560 of class __NSCFTimer autoreleased with no pool in place - just leaking
TestNSTimerRunloop[3663:5d03] *** __NSAutoreleaseNoPool(): Object 0x4b237a0 of class __NSArrayI autoreleased with no pool in place - just leaking

所以说在网上看到某些文章后一定要亲自试一下,不是所有的都是正确的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值