• 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];
    }

    那怎么办呢?

  • 相关阅读:
    jquery 视觉特效(幻灯片效果)
    jquery 视觉特效(图片内容滑动浏览器)
    jquery之stop()的用法
    网站图片幻灯片效果之左右箭头的制作
    数据库三范式
    jquery 视觉特效(当鼠标悬停时,显示大图)
    jQuery EasyUI 1.2.6 新特性
    VM虚拟机网络设置
    Win7:修改注册表来更改“桌面”、“我的文档”、“收藏夹”的位置
    jQuery EasyUI API 中文文档 数字滑块(Slider)
  • 原文地址:https://www.cnblogs.com/QM80/p/3594113.html
Copyright © 2020-2023  润新知