• iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存


    iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码

    // 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读
    - (void)setCar:(Car *)car
    {
       if (_car != car ) {
            [_car release]; // 释放旧车
            _car = [car retain]; // 新车引用计数加一
        }
    }
    
    // 2.Person类在回收的时候也必须将它所拥有的车对象回收
    - (void)dealloc
    {
        // Person对象被回收 那么将Person类对象拥有的Car对象_car对象也应该被回收
        [_car release];
        [super dealloc];
    }

    如果有很多个类要被引用那要写很多类似的代码,那么可以用@Property来自动生成上面的代码,但是必须借助@Property的参数,可分为四种类型:

    1.set方法内存管理相关的参数

    retain:用于任何OC对象类型,可以自动生成set方法中管理内存的代码,作用和上面示例中的set方法中的代码作用一致

    assign:用于任何非OC对象,比如:枚举、结构和基本数据类型,可以自动生成set方法不涉及管理内存操作

    copy:release旧值,copy新值一般用于NSString

    2.是否要生成set方法参数

    readwrite:同时生成get、set方法的声明、实现(默认)

    readonly:只会生成get方法的声明和实现

    3.多线程管理参数

    nonatomic:性能比较高(一般用它)

    atomic:性能低(默认)

    4.是否为sett和get方法重命名

    @property (getter = getAge,setter = setAge:) int age;  // 在定义属性的时候可以自定义get/set方法的名 set方法一定要加冒号
    
    // 这个参数主要用于BOOL类型在调用get方法的时候 方法名最好以is开头 @property (getter
    = isRich) BOOL rich; // 返回是否富有 那么get方法最好以is开头 BOOL b = person.isRich;

    5.总结:在内存管理中常用的写法如下

    @property (nonatomic,retain) NSString *name;
    @property (nonatomic,retain) Book *book;
    @property (nonatomic,assign) int age;

    它的作用如下面代码:

    // 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读
    - (void)setCar:(Car *)car
    {
       if (_car != car ) {
            [_car release]; // 释放旧车
            _car = [car retain]; // 新车引用计数加一
        }
    }

    可以看出:@propery已经实现了,OC对象在set方法中一部分的内存管理,但是还是没有完全回收对象如下代码的作用就没有体现

    // 2.Person类在回收的时候也必须将它所拥有的车对象回收
    - (void)dealloc
    {
        // Person对象被回收 那么将Person类对象拥有的Car对象_car对象也应该被回收
        [_car release];
        [super dealloc];
    }

    那怎么办呢?

  • 相关阅读:
    C#操作Excel开发报表系列整理
    API安全的最佳实践
    低代码介绍与行业动态
    农产品供应链基于区块链架构设计
    AIOps案例介绍
    智慧交通与车联网介绍
    Spring Boot服务中使用Kong Ingress控制器
    辅导你的软件团队获得成功
    项目失败原因
    微前端架构介绍
  • 原文地址:https://www.cnblogs.com/QM80/p/3594113.html
Copyright © 2020-2023  润新知