博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
阅读量:6370 次
发布时间:2019-06-23

本文共 1561 字,大约阅读时间需要 5 分钟。

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

那怎么办呢?

转载于:https://www.cnblogs.com/QM80/p/3594113.html

你可能感兴趣的文章
忘记root用户密码怎么办?
查看>>
esxi定时任务
查看>>
Scaffold-DbContext
查看>>
关于VMware Workstation主机列表问题求教
查看>>
配置管理小报101021:给ubuntu加监控
查看>>
qml文字滚动效果的封装,实现方式运用的qml中提供的动画效果,另一种实现方式也可以使用定时器修改控件的坐标来实现...
查看>>
标准C++实现任务队列
查看>>
jdbc url
查看>>
刷leetcode第704题-二分查找
查看>>
debug_backtrace() 函数生成一个 backtrace(追踪)
查看>>
第七天,还是盒子
查看>>
XAMPP软件包下载
查看>>
XXL-JOB初体验-ORACLE版
查看>>
沉思录:别人的棺材
查看>>
jersey + spring + mybatis + redis项目搭建
查看>>
PAT 1006 部分正确_另一种解法
查看>>
在Keil环境下使用JLink实现printf输出重定向至debug窗口
查看>>
postgres的\d命令不显示全部的用户表
查看>>
poj 3468 A Simple Problem with Integers
查看>>
OOA/OOD/OOP细讲
查看>>