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

  • 相关阅读:
    Ubuntu无法初始化软件包信息
    数组名做函数的参数
    Printf函数中%p代表什么数据类型
    assert()函数用法总结
    C语言printf 格式 zz
    零值指针指向何处? zz~
    命名空间“System.Net”中不存在类型或命名空间名称“Sockets”。是否缺少程序集引用?
    AD20配置为中文显示
    sharepoint:实现搜索功能
    sharepoint:爬网完成后上传新文档搜索不到(设定爬网Schedule)
  • 原文地址:https://www.cnblogs.com/QM80/p/3599695.html
Copyright © 2011-2022 走看看