A ---- > setter . getter 定义
1、在OC中,为单一实例变量赋值的方法称为setter 方法(设置器)
2、在OC中,读取实例变量的方法称为 getter 方法(访问器)
B ---- > setter /getter 的书写格式
1、-(void)setAge :(NSUInteger)age;
set + 实例变量名 (首字母大写)忽略下划线
2、-(NSUInteger)age;
返回值类型与实力变量类型一致,方法与实例变量名相同,忽略下划线
C---- > 属性的定义---> 作用
1、OC 2.0的语法, 提供了setter 和getter 方法的默认实现
可以简化程序代码,提高程序的安全性
D ----> 关键字 + 实例
.h 文件 : @property NSString *name 相当于声明了实例变量的 setter 和getter 方法
.m 文件 : @synthesize name = _name;
1)、@synthesize name 为实现声明的属性
2)、_指定生成的setter 和 getter 方法的内部操作的实例变量
Xcode 4.5之后 @synthesize 可以省略。 当没有实现getter 和 setter 方法的时候 通过 @synthesize 可以自动生成标准的 setter 和 getter 方法
E ---- > 属性和实例变量
1、如果方法内部操作的实例变量未定义,系统会自动生成一个_属性名的实例变量,但是生成的实例变量可见度私有。子类不可访问
2、一旦同时重写了setter 和 getter 方法, 并且没有实现 @synthesize ,@synthesize 就 不再 生成实例变量
F ---- > 属性的特性
1、为属性提供的一些关键字来控制setter getter 方法的实现细节 ,这些关键字称为属性的特性
G------>、读写控制 (readonly \readwrite\setter = \getter = ) 1)、readonly -->只生成 getter 方法,不生成 setter 方法
2)、readwrite -->告诉编译器生成 setter 和 getter 方法,默认的读写特性
3)、setter = 指定属性生成的setter 方法的名字
getter = 指定生成getter 方法的名字
H----- >、原子性控制 (nonatomic atomic)
1)\atomic --- > 原子特性,setter getter 方法在多线程访问下是绝对安全的,即 setter 和 getter 内部做了多线程访问处理。 默认的原子特性
2)nonatomic --- > 非原子特性 setter 个getter 内部不会做多线程访问处理
3)使用 atomic 对setter 和getter 不断的加锁 解锁 保证线程访问的安全,但是会 占用系统资源,降低系统性能 。所以只有在需要线程安全的时候才会定义为 atomic
I ------ > 属性的特性 -- - ->语义特性
1、语义设置 (assign/retain/copy)
2、如果属性是非对象类型,属性的语义设置使用assign;
如果属性是对象类型,属性的语义设置为retain;若果属性是对象类型并且想得到对象的副本,使用copy
3、语义设置 assign 内部实现
- (void) setAge : ( NSInteger ) age {
_age = age ;
}
- ( NSInteger ) age{
return _age;
}
4、语义设置关键字为 retain --- >内部实现
- ( void )setName: ( NSString *)name{
if ( _name != name ){
[ _name release];
_name = [ name retain ];
}
}
- ( NSString * ) name{
return [[ _name retain ] autorelease ];
}
5、语义设置的关键字是 copy
- (void)setGender : (NSString *)gender {
if ( _gender != gender ){
[ _gender release ];
_gender = [gender copy]
}
}
6、J ---- > 点语法
1、定义 --- > 在OC 2.0 中定义的语法格式 ,提供了便捷的属性访问方式
2、使用 : 符合系统默认的setter getter 书写格式的方法都可以使用点语法
3、属性是一对 getter 和 setter 方法, 点语法是属性的另一种调用格式