Objective - C基础: 第五天 - 5.@property - 参数详解
在前面我们利用了@property来简洁内存管理的代码, 但里面涉及到一些参数有很多人都不明白, 现在我们来一起看看~~
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型, 也就是基本数据类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高 (暂时先不用理会, 一般就用这个)
* atomic : 性能低(默认, 一般都不用)
4.setter和getter方法的名称
* 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
对于setter和getter方法, 可以使用@property来进行更改名称, 比如:
@property (setter = abcd:, getter = ABCD)int age;
那我们调用的时候就不用再写setAge, 或者直接age这样子了, 直接调用我们更改好的方法名, 但一般人不会这么去修改, 除非是非常必要, 否则直接写原来的setAge方法更加的直观.
但有一个例子比较特殊, 就是上面例子里所写的BOOL类型, 在前面, 我们知道了BOOL类型的方法名最好是以is开头, 当然,setter方法我们不用改, 改的是getter方法, 改成以is开头, 这样子看起来比较顺眼, 而且代码也很规范.
PS: 但是有一个注意点, 在@property() 的括号中, 声明参数不能冲突, 一旦冲突就会引起报错.
好了, 这次我们就讲到之类, 下次我们继续~~~