iOS基础 对Strong和Weak的理解
2019-05-26 本文已影响0人
NiCeForMe
之前对Strong和Weak的理解并不够深,只知道Strong是强引用,对象的引用计数加一,weak是弱引用,防止循环引用。但是对weak、strong修饰的对象何时销毁没有准确的理解,今天写了个demo加深一下理解。
Strong
Strong为强引用,强引用一个对象的时候,也就是会持有该对象,该对象的引用计数加1,如果不是通过属性来初始化一个对象的时候系统会默认帮我们添加__strong
- (void)strongAndWeakTestOne
{
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(50, 200, 100, 100)];
NSLog(@"return count is %ld",(long)CFGetRetainCount((__bridge CFTypeRef)view));
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
NSLog(@"return count is %ld",(long)CFGetRetainCount((__bridge CFTypeRef)view));
}
上面代码中我创建了一个view对象,第一次输出的结果为1,因为默认strong修饰,所以view得引用计数为1,第二次输出结果为2,因为将该view添加到父view中,父view持有了该view,所以引用计数加1。
那么Strong修饰的对象什么时候被销毁呢?
引用计数为0的时候该对象销毁