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

  • 相关阅读:
    Android应用程序注冊广播接收器(registerReceiver)的过程分析
    智能生活 “视”不可挡——首届TCL杯HTML5智能电视开发大赛等你来挑战
    点滴的积累---J2SE学习小结
    公开课
    iOS学习之 plist文件的读写
    【STL】关联容器 — hash_set
    《Pro Android Graphics》读书笔记之第三节
    第一章. ActionScript 语言基础
    JAVA数组的定义及用法
    MS-SQLSERVER中的MSDTC不可用解决方法
  • 原文地址:https://www.cnblogs.com/QM80/p/3599695.html
Copyright © 2011-2022 走看看