一 概述
上一课介绍了使用@property (retain)替代OC对象的set方法管理内存,本文再介绍@property其他相关的知识点:
- set方法内存管理相关参数
- 是否要生成set方法
- 多线程管理
- setter和getter方法的名称
二 代码示例
2.1 Person类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| //Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic,assign) int age; @property (retain) NSString *name; @property (readwrite) int height; @property (getter=abc,setter=setAbc:) int weight; @end
//Person.m @implementation Person - (int)abc { return _weight; } @end
|
2.2 main.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... Person *p=[[Person alloc]init]; //[p setWeight:100]; //[p setAbc:100]; p.weight=100; int a=[p abc]; NSLog(@"%d",a); } return 0; }
|
三 @property参数
3.1 控制set方法的内存管理
- Retain:release旧值,retain新值(OC对象)
- Assign:直接赋值,不做任何内存管理(默认,用于非OC对象类型)
- Copy:release旧值,copy新值(一般用于NSString*)
3.2 控制需不需要生成set方法
- Readwrite:同时生成set方法和get方法(默认)
- readonly:只会生成get方法
3.3 多线程管理
- Atomic:性能低(默认)
- Nonatomic:性能高
3.4 控制set方法和get方法的名字
- setter:设置set方法的名称,一定有个冒号:
- getter:设置get方法的名称