您的位置:首页 > 移动开发 > IOS开发

iOS ARC下循环引用的问题 -举例说明strong和weak的区别

2014-03-14 02:15 615 查看
strong:适用于OC对象,作用和非ARC中的retain作用相同,它修饰的成员变量为强指针类型
weak:适用于OC对象,作用和非ARC中的assign作用相同,修饰的成员变量为弱指针类型
assign:适用于非OC对象类型

在OC对象循环引用的时候一端为strong类型,另一段为weak类型


示例代码如下:


/****************************** Teacher.h文件 ***********************************/
#import <Foundation/Foundation.h>
@class Student;
@interface Teacher : NSObject
@property (nonatomic,strong) Student *student;
@property (nonatomic,strong) NSString *teacherName;
@end

/****************************** Teacher.m文件 ***********************************/
#import "Teacher.h"
#import "Student.h"
@implementation Teacher
- (void)dealloc
{
NSLog(@"叫%@的Teacher对象被销毁了",_teacherName);
}
@end

/****************************** Student.h文件 ***********************************/
#import <Foundation/Foundation.h>
@class Teacher;
@interface Student : NSObject
@property (nonatomic,weak) Teacher *teahcher;
@property (nonatomic,strong) NSStirng *studentName;
@end

/****************************** Student.m文件 ***********************************/
#import "Student.h"
#import "Teacher.h"
@implementation Student
- (void)dealloc
{
NSLog(@"叫%@的Student对象被销毁了",_stuName);
}
@end

/****************************** main.m文件 ***********************************/
#import <Foundation/Foundation.h>
#import "Teacher.h"
#import "Student.h"
int main(int argc, const char * argv[])
{
Teacher *teacher = [[Teacher alloc] init];
teacher.teacherName  = @"张老师";

Student *student = [[Student alloc] init];
student.stuName = @"李同学";

  // Student类对象中的Teacher属性为弱引用
student.teahcher = teacher;

// Teacher类对象中的Student属性为强引用
teacher.student = student;

return 0;
}


main方法中代码的简单内存图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: