博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决ARC的循环引用问题
阅读量:6974 次
发布时间:2019-06-27

本文共 1249 字,大约阅读时间需要 4 分钟。

看看下面的程序有什么问题:

BNRItem.h

@interface BNRItem : NSObject@property (nonatomic, strong) BNRItem *containedItem;@property (nonatomic, strong) BNRItem *container;...@end

 

BNRItem.m

#import "BNRItem.h"@implementation BNRItem...- (void)setContainedItem:(BNRItem *)containedItem{    _containedItem = containedItem;    self.containedItem.container = self;}@end

main.m

int main(int argc, const char * argv[]){    @autoreleasepool {        // Create a mutable array object, store its address in items variable        NSMutableArray *items = [[NSMutableArray alloc] init];        BNRItem *backpack = [[BNRItem alloc] initWithItemName:@"Backpack"];        [items addObject:backpack];        BNRItem *calculator = [[BNRItem alloc] initWithItemName:@"Calculator"];        [items addObject:calculator];        backpack.containedItem = calculator;        backpack = nil;        calculator = nil;        for (BNRItem *item in items) {            NSLog(@"%@", item);        }        // Destroy the mutable array object        NSLog(@"Setting items to nil...");        items = nil;    }    return 0;}

 

上面的程序是有问题的,会导致循环引用(strong reference cycle)。

导致内存泄露。

 

解决方案:

将某个指针的特性设置为弱引用

@property (nonatomic, weak) BNRItem *container;

 

转载于:https://www.cnblogs.com/davidgu/p/4435352.html

你可能感兴趣的文章
Apache的三种工作模式
查看>>
dlib编译成静态库及被其它程序调用
查看>>
UNIX网络编程之epoll的 accept , read , write
查看>>
java事务管理
查看>>
分布式MySQL 数据库
查看>>
MMX指令集系列之一----数据加载与算术运算指令
查看>>
R语言可视化二
查看>>
Python abs() 函数
查看>>
西电网络赛 - C
查看>>
div布局方案整理
查看>>
Python之内置函数再总结
查看>>
同步锁,死锁现象与递归锁,信息量Semaphore.....(Day36)
查看>>
sql server 索引阐述系列三 表的堆组织
查看>>
GD库笔记
查看>>
js函数知识点
查看>>
Centos 配置eth0 提示Device does not seem to be present
查看>>
redis5.0.3单实例简单安装记录
查看>>
metro 微博api开发,post请求
查看>>
C#中UDP数据的发送、接收
查看>>
自己设计大学排名-数据库实践
查看>>