OC基础--内存管理中的@property关键字以及其参数
在上一篇博客中整理的内存管理,管理类的代码量会感觉很大,而且如果对象多的话,感觉到代码有点冗余。下面就介绍Xcode中为我们自动生成内存管理代码的关键字@property
例如:在Person这个类中,要拥有Phone这个类作为成员变量
之前的写法是:(还有一点时要记得在Person类重写dealloc方法中,一定[_phone release])
@interface Person : NSObject
{
Phone *_phone;
}
//setter 和 getter 的声明
- (void) setPhone:(Phone *)phone;
- (Phone *) phone;
@implementation
//setter 和 getter 的实现
- (void) setPhone:(Phone *)phone
{
if (_phone != phone)
{
[_phone release];
_phone = [phone retain];
}
}
- (Phone *)phone
{
return _phone;
}
@end
应用了@property关键字的写法:(dealloc方法中也一定记得release)
//这里的retain:生成set方法实现中,release旧值,retain新值--一行代码就搞定
@property (retain) Phone *phone;
下面才是今天的重点!
@property 的参数:
一、控制set方法的内存管理:
1.retain:release旧值,retain新值
2.assign:直接赋值,不做任何内存管理(默认)
3.copy
二、控制有没有set方法和get方法
1.readwrite:同时生成set方法和get方法(默认,用的少)
2.readonly:只会生成get方法
三、多线程管理
1.atomic:性能低(默认)
2.nonatomic:性能高
四、控制set方法和个头方法的名称
1.setter:设置set方法的名称,一定有个冒号:因为冒号也是方法的一部分
2.getter:设置get方法的名称
代码实例:
@property (nonatomic, assign,readwrite) int age; @property (nonatomic, retain) House *house; @property (nonatomic, assign, getter = getHeight, setter = setMyHeight:) int height;
OC基础--内存管理中的@property关键字以及其参数的更多相关文章
- OC基础 内存管理
OC基础 内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...
- 【OC语法快览】四、基础内存管理
Basic Memory Management 基础内存管理 If you're w ...
- OC的内存管理
摘自:http://blog.csdn.net/hahahacff/article/details/39839571 OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有 ...
- 「OC」内存管理
一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空 ...
- OC:内存管理、dealloc方法、copy知识点
属性的声明:使⽤@property声明属性 例如:@property NSString *name: 相当于@interface中声明了两个⽅法(setter.getter): 属性的实现:使⽤@s ...
- 12.Object-C--浅谈OC的内存管理机制
昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...
- OC - 5.内存管理
一.引用计数器 1> 栈和堆 栈 ① 主要存储局部变量 ② 内存自动回收 堆 ① 主要存储需要动态分配内存的变量 ② 需要手动回收内存,是OC内存管理的对象 2> 简介 作用 ① 表示对象 ...
- OC的内存管理(一)
在OC中当一个APP使用的内存超过20M,则系统会向该APP发送 Memory Warning消息,收到此消息后,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,否则程序会 ...
随机推荐
- JAVASE笔记回顾
第一部分,JAVA基础和面向对象 part01 入门与开发环境搭建 1: 计算机基础知识(了解)(1)计算机(2)计算机硬件(3)计算机软件系统软件:windows,linux,mac应用软件:QQ, ...
- codeforces 480C C. Riding in a Lift(dp)
题目链接: C. Riding in a Lift time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- UESTC 880 生日礼物 --单调队列优化DP
定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数. 转移方程有: 1.当天不买也不卖: dp[i][j]=dp[i-1][j]; 2.当天买了j-k股: dp[i][j]=max(dp[ ...
- maven总结4
仓库.nexus 构件:在maven中,任何一个依赖(jar包).插件(maven-compiler-plugin-2.5.1.jar)或者项目输出(前面例子中运行mvn clean install ...
- C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?
根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推:同级节点可以用索引.名称.文本来区分.用索引区分根节点时,TreeView.Nodes[0]就是第一个 ...
- Linux下CGroup使用说明梳理
CGroup 介绍CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制.记录.隔离进程组 (process groups) 所使用的物力资源 (如 cpu m ...
- jquery中$("#afui").get(0)为什么要加get(0)呢?
jquery中$("#afui").get(0)为什么要加get(0)呢? 2015-04-13 17:46SYYZZ3 | 浏览 509 次 Jquery $("#a ...
- usb驱动开发6之端点描述符
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...
- 给 IIS Express 配置虚拟目录
使用 vs2015 打开旧项目,之前使用 iis 配置站点,然后在 vs 中附加 w3wp.exe 进行开发和调试的. 由于种种原因 iis 上配置站点各种失败. 之后发现,其实在 vs2015 中按 ...
- SQL时间相关 - SQL日期,时间比较
SQL Server 中时间比较 例子: select count(*) from table where DATEDIFF ([second], '2004-09-18 00:00:18', '20 ...