1.属性
①注意,写属性一定不要加下划线
②属性的特性-读写性:
《1》readonly:只生成getter方法,不生成setter方法
《2》readwrite:(系统默认)可读可写,生成getter,setter方法
《3》setter= :给setter方法换一个新名字
《4》getter=:给getter方法换一个新名字
③属性的特性-原子性:
《1》atomic:原子特性。原子操作(setter、getter内部做了多线程访问处理),一般不用(系统默认)
《2》nonatomic:非原子特性。非原子操作,声明属性时,通常使用nonatomic
④属性的特性-语义特性:
MRC(手动引用计数)手动管理内存下使用
《1》assign:修饰基本数据类型(可以修饰对象类型)
使用:NSInteger、int、double、CGFloat...
《2》retain:修饰类对象(不能修饰基本数据类型)
使用:除字符串NSString以外的全部类对象类型
《3》copy:修饰类对象(不能修饰基本数据类型)
ARC(自动引用计数)
《1》assgin:修饰基本数据类型(类对象类型)
《2》weak:修饰类对象(不能修饰基本数据类型)
《3》strong:修饰类对象(不能修饰基本数据类型)
《4》copy:修饰类对象(不能修饰基本数据类型)
⑤如果有两个以上的语义,用“,”隔开
⑥注意setter方法不要忘记冒号
⑦使用属性的情况下,如果同时重写getter setter方法,需要写@synthesize
示例:
声明.h
@interface Person:NSObject
@property(nonatomic,setter=myNameIs:,getter=liuwa,copy)NSString* name;
@property(nonatomic,assign)NSInteger age;
@property(nonatomic,retain)NSString *sex;
@property(nonatomic,copy)NSString *color;
@end
实现.m
@implementation Person
@synthesize sex = _sex;
@synthesize age = _age;
@synthesize color = _color;
//retain
- (void)setSex:(NSString *)sex{
if(sex != _sex){
[_sex release];
_sex = [sex retain];
}
}
- (NSString *)sex{
return nil;
}
//assign
- (void)setAge:(NSInteger)age{
_age = age;
}
- (NSInteger)age{
return _age;
}
//copy
- (void)setColor:(NSString *)color{
if(color != _color){
[_color release];
_color = [color copy];
}
}
- (NSString *)color{
return [[_color retain] autorelease];
}
@end