黑马程序员技术交流社区
标题:
oc 中set、get、@property 和内存管理总结
[打印本页]
作者:
a380vs747`
时间:
2015-3-25 11:02
标题:
oc 中set、get、@property 和内存管理总结
1、最简单的set、get方法
// 声明
@interface Student : NSObject
{
int _age;
}
- (void)setAge:(int age);
- (int)age;
@end
// 实现
@implementation Student
- (void)setAge:(int age)
{
_age = age;
}
- (int)age
{
return _age;
}
@end
复制代码
2、当set方法需要过滤参数时,set方法的实现可以加入过滤代码
- (void)setAge:(int age)
{
if (age <= 0)
age = 1;
_age = age;
}
复制代码
3、利用@property和synthesize
// 声明
@interface Student : NSObject
{
int _age;
}
@property int age;// 可以省略上面的属性变量声明
@end
// 实现
@implementation Student
@synthesize age = _age; // 可以省略,只要@property就可以。也可以省略 = _age。
@end
复制代码
简单点在类的声明里
@property int age; //自动生成_age变量,并在类的实现里生成setter和getter方法。
4、内存管理,非ARC机制下,需要手动retain和release
@property (retain) NSString *name;
// 会自动在类的实现中生成如下方法
- (void)setName:(NSString *name)
{
if (_name != name)
{
[_name release];
_name = [name retain];
}
}
复制代码
5、property的属性
内存管理的相关参数:
1) retain: release旧值,retain新值(适用于oc对象)
2) assign:直接赋值(默认的,适用于非oc对象,比如int类型、结构体)
3)copy : release旧值,copy新值
是否生成set方法:
1)readwrite:同时生成setter和getter方法和实现(默认)
2)readonly:只生成getter方法和实现
多线程管理:
1)nonatomic:性能高,一般用这个
2)atomic:性能低(默认)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2