zoukankan      html  css  js  c++  java
  • iOS ARC下循环引用的问题 -举例说明strong和weak的区别

    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方法中代码的简单内存图如下:

  • 相关阅读:
    03 JVM 从入门到实战 | 简述垃圾回收算法
    02 JVM 从入门到实战 | 什么样的对象需要被 GC
    01 JVM 从入门到实战 | 什么是 JVM
    从一道面试题探究 Integer 的实现
    程序员如何写一份更好的简历
    自己动手实现分布式任务调度框架(续)
    一个excel(20M)就能干趴你的poi,你信吗?
    一个普通类就能干趴你的springboot,你信吗?
    自己动手实现springboot配置(非)中心
    自己动手实现分布式任务调度框架
  • 原文地址:https://www.cnblogs.com/QM80/p/3599695.html
Copyright © 2011-2022 走看看