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

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

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 
#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;}

persn.h文件():

//  Person.h//  ////  Created by apple on 15/8/12.////#import 
@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

dog .h

//  Created by apple on 15/8/13.////#import 
@class Person;@interface Dog : NSObject@property (nonatomic, assign) Person *owner; // owner 所有者@end

dog.m

//  Created by apple on 15/8/13.////#import "Dog.h"@implementation Dog- (void)dealloc {        [_owner release];        NSLog(@"Dog dealloc");    [super dealloc];}@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/wahy/p/4817219.html

你可能感兴趣的文章
Timesten 日常管理命令合集
查看>>
gnome桌面无法使用笔记本的触摸板
查看>>
默认npm太慢,换用淘宝npm镜像
查看>>
设置谷歌浏览器为默认浏览器
查看>>
最大值
查看>>
html (超文本标记语言)
查看>>
springmvc与Ajax交互
查看>>
图片 滚动切换效果(三)
查看>>
response.setHeader()的用法
查看>>
日期格式化
查看>>
java基础入门-建立能够多client链接的ServerSocket
查看>>
刨根问底Objective-C Runtime(4)- 成员变量与属性
查看>>
hdu4734 数位dp + 小技巧
查看>>
mouseover和mouseenter的区别
查看>>
索引字段的宽度降下来?
查看>>
js 唤起APP
查看>>
专车降价滴滴快车使命终结?
查看>>
Java for LeetCode 098 Validate Binary Search Tree
查看>>
Java for LeetCode 108 Convert Sorted Array to Binary Search Tree
查看>>
改变UITextField placeHolder 字体 颜色
查看>>