OC基础--内存管理中的@property关键字以及其参数

在上一篇博客中整理的内存管理,管理类的代码量会感觉很大,而且如果对象多的话,感觉到代码有点冗余。下面就介绍Xcode中为我们自动生成内存管理代码的关键字@property

例如:在Person这个类中,要拥有Phone这个类作为成员变量

之前的写法是:(还有一点时要记得在Person类重写dealloc方法中,一定[_phone release])

 1 @interface Person : NSObject
 2 
 3 {
 4     Phone *_phone;
 5 }
 6 //setter 和 getter 的声明
 7 - (void) setPhone:(Phone *)phone;
 8 - (Phone *) phone;
 9 
10 @implementation
11 //setter 和 getter 的实现
12 - (void) setPhone:(Phone *)phone
13 {
14     if (_phone != phone)
15     {        
16         [_phone release];
17         _phone = [phone retain];
18     }
19 }
20 
21 - (Phone *)phone
22 {
23     return _phone;
24 } 
25 @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方法的名称

代码实例:

1 @property (nonatomic, assign,readwrite) int age;
2 
3 @property (nonatomic, retain) House *house;
4 
5 @property (nonatomic, assign, getter = getHeight, setter = setMyHeight:) int height;
原文地址:https://www.cnblogs.com/gchlcc/p/5201328.html