前言
关于__weak和__strong关键字,__weak关键字好理解,用它修饰本类的self,可以防止block中循环引用问题,那么__strong关键字用在block中,又是怎么回事呢?
正文
废话少说,先上代码:

创建一个SampleObject类对象,并且self.sample对其引用,在没有__strong修饰符修饰weaksample的情况下,3秒后对其释放,打印结果如何,看下图:

在打印第四次sampleobject后(3秒后),因为self.sample置空,之后的结果都是(null)。
现在我们把图1的28行注释去掉,看下打印结果如何:

可以看到即使3秒过后仍然是打印SampleObject对象,while循环结束后才对其进行释放(dealloc SampleOjbect)。
__strong修饰符作用即在block中变量如果在别处进行了释放,那么系统会等待block执行结束后才对block中变量进行释放。
网友评论