循环引用问题
来源:互联网 发布:sql server 2000数据库 编辑:程序博客网 时间:2024/06/16 21:41
3-循环的retain 问题
人有宠物:狗
狗有主人:人
那么使用在使用两个类时,再用 #import相互导入 就会有问题,需要使用 @class
但是当两个类都要引用对方的对象进入自己的类做属性时,内存泄露的另一种情况。解决办法, 其中一个先释放(但是还有僵尸对象的问题)
另一个解决办法是一个用 retain,一个用 assign. 在person.h中,定义dog类型的 属性时用retain .在 dog.h中,定义owner时 用asiign,就可以解决。
看我们看一个狗和人循环引用的例子:
// main.m// 08-循环引用//// Created by apple on 15/8/13.////#import <Foundation/Foundation.h>#import "Person.h"#import "Dog.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; Dog *d = [Dog new]; p.dog = d; // setDog: d.owner = p; [d release]; [p release]; } return 0;}
// Person.h// //// Created by apple on 15/8/12.////#import <Foundation/Foundation.h>@class Dog;@interface Person : NSObject@property (nonatomic, retain) Dog *dog;@end
person.m 文件:
// Person.m// //// Created by apple on 15/8/12.////#import "Person.h"@implementation Person- (void)dealloc { [_dog release]; NSLog(@"Person 释放"); [super dealloc];}@end
// Created by apple on 15/8/13.////#import <Foundation/Foundation.h>@class Person;@interface Dog : NSObject@property (nonatomic, assign) Person *owner; // owner 所有者@end
// Created by apple on 15/8/13.////#import "Dog.h"@implementation Dog- (void)dealloc { [_owner release]; NSLog(@"Dog dealloc"); [super dealloc];}@end
0 0
- 循环引用问题,
- 循环引用问题
- block循环引用问题
- blocks 循环引用问题
- 循环引用问题
- iOS 循环引用问题
- block循环引用问题
- block循环引用问题
- 循环引用的问题...
- Block循环引用问题
- FastJson循环引用问题
- block循环引用问题
- iOS 循环引用问题
- Block循环引用问题
- shared_ptr循环引用问题
- iOS循环引用问题
- swift - 循环引用问题
- shared_ptr循环引用问题
- JDK环境变量配置,studio安装。RelativeLayout和LinearLayout
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
- System.Reflection.BindingFlags 说明
- 匿名函数(回调函数)的理解思路
- RT-Thread finsh源码分析: finsh_ops.c
- 循环引用问题
- 判断表是否存在,如果存在就删除然后重新创建。
- 蘑菇街面试题
- 解决SublimeText输入法不跟随的问题
- web前端js绘制统计图表,访问数据库
- maven学习2
- android富文本编辑器
- hibernateTemplate和hibernateDaoSupport
- ACM经典算法之排序/查找