循环引用
循环引用导致内存泄漏。
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.age = 10;
person.block = ^{
NSLog(@"%d",person.age);
};
}
NSLog(@"大括号结束啦");
return 0;
}
运行代码打印内容
block的copy[55423:9158212] 大括号结束啦
可以发现大括号结束之后,person
依然没有被释放,产生了循环引用。
通过一张图看一下他们之间的内存结构
上图中可以发现,Person对象和block对象相互之间产生了强引用,导致双方都不会被释放,进而造成内存泄漏。