解决ARC的循环引用问题
2015-04-17 16:39
295 查看
看看下面的程序有什么问题:
BNRItem.h
BNRItem.m
main.m
上面的程序是有问题的,会导致循环引用(strong reference cycle)。
导致内存泄露。
解决方案:
将某个指针的特性设置为弱引用
@property (nonatomic, weak) BNRItem *container;
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;
相关文章推荐
- 在ios开发中,ARC的循环引用问题和解决办法
- 用JAXB转换XML和Java对象时的循环引用问题的解决方法
- 0c-41-ARC下循环引用问题
- 如何在 iOS 中解决循环引用的问题
- Block使用中的一些疑问解答(包括循环引用问题的解决)
- iOS: ARC和非ARC下使用Block与循环引用问题
- 解决Eclipse中Project循环引用而报错的问题
- iOS 解决block中self的循环引用问题
- iOS ARC下循环引用的问题 -举例说明strong和weak的区别
- Xcode8调试黑科技:Memory Graph实战解决闭包引用循环问题
- 解决Eclipse中Java工程间循环引用而报错的问题
- ARC下循环引用的问题
- 解决循环引用问题系列 - 成员变量访问问题
- 如何解决Eclipse中Java工程间循环引用而报错的问题
- 解决Eclipse中Java工程间循环引用而报错的问题
- 在springmvc中解决FastJson循环引用的问题
- springmvc中解决FastJson循环引用的问题
- 封装一个GCD定时器,彻底解决定时器循环引用、释放时机问题
- [iOS]ARC下循环引用的问题
- Block的引用循环问题 (ARC & non-ARC)