Objective - C基础: 第五天 - 5.@property - 参数详解

在前面我们利用了@property来简洁内存管理的代码, 但里面涉及到一些参数有很多人都不明白, 现在我们来一起看看~~


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

* retain : release旧值,retain新值(适用于OC对象类型)

* assign : 直接赋值(默认,适用于非OC对象类型, 也就是基本数据类型)

* copy   : release旧值,copy新值

 

2.是否要生成set方法

* readwrite : 同时生成settergetter的声明、实现(默认)

* readonly  : 只会生成getter的声明、实现

 

3.多线程管理

* nonatomic : 性能高 (暂时先不用理会, 一般就用这个)

* atomic    : 性能低(默认, 一般都不用)

 

4.settergetter方法的名称

* setter : 决定了set方法的名称,一定要有个冒号 :

* getter : 决定了get方法的名称(一般用在BOOL类型)



例子:

#import <Foundation/Foundation.h>

@interface Person : NSObject


// 返回BOOL类型的方法名一般以is开头
@property (getter = isRich) BOOL rich;

//   
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight

// 
@property (readwrite, assign) int height;

@property (nonatomic, assign) int age;

@property (retain) NSString *name;
@end


对于settergetter方法, 可以使用@property来进行更改名称, 比如:

@property (setter = abcd:, getter = ABCD)int age;

那我们调用的时候就不用再写setAge, 或者直接age这样子了, 直接调用我们更改好的方法名, 但一般人不会这么去修改, 除非是非常必要, 否则直接写原来的setAge方法更加的直观.



但有一个例子比较特殊, 就是上面例子里所写的BOOL类型, 在前面, 我们知道了BOOL类型的方法名最好是以is开头, 当然,setter方法我们不用改, 改的是getter方法, 改成以is开头, 这样子看起来比较顺眼, 而且代码也很规范.





PS: 但是有一个注意点, 在@property() 的括号中, 声明参数不能冲突, 一旦冲突就会引起报错.






好了, 这次我们就讲到之类, 下次我们继续~~~

posted @ 2015-01-26 20:30  背着吉他去流浪  阅读(246)  评论(0编辑  收藏  举报