您的位置:首页 > 移动开发 > Objective-C

Objective-C 基础知识之 (十四):属性 Property 点语法

2015-09-25 19:58 645 查看
属性

@property@synthesize

可以通过声明属性完成对某个实例变量setter、getter方法的默认声明。
如果需要在类的外部使用实例变量,则声明对应的属性。

属性声明:
@property 属性类型 属性名字
属性的类型:
1、必须跟操作的实例变量的类型相同。
2、属性的类型决定了setteer方法的参数类型,getter方法的返回值类型。
属性的名字:
1、实例变量去掉下划线
2、决定了setter方法的名字及参数名,getter方法的名字。

例:声明实例变量和属性
NSString * _name; 实例变量
@property NSString *name; 属性
声明属性等价于声明了setter、getter方法。
-(void)setName:(NSString *)name; setter方法
- (NSString*)name; getter方法

属性不是实例变量。
属性对应的setter、getter方法中操作了某个实例变量。
一般称为:属性操作某个实例变量、属性关联某个实例变量。

属性实现:
@synthesize 属性名 = 实例变量名
等号右侧:决定了编译器在实现setter、getter方法时,方法内部使用的实例变量名。

系统默认功能:

1、属性的实现可以省略。
2、如果声明属性,编译器默认声明对应的实例变量。

属性的特性设置:
1、读写特性
readwrite 默认的,可读可写。编译器默认声明了setter,getter方法。
readonly 只读。编译器只声明了getter方法。不能进行设置。
setter 设置编译器声明的setter方法的名字。轻易不要用。
getter 设置编译器声明的getter方法的名字。一般用在BOOL类型的属性。

2、原子属性
atomic 原子性,默认的,提供线程安全保护。默认属性。
nonatomic 非原子属性,不保证安全,绝大多数情况下使用

3、语义特性 语义:表示setter方法的内部实现。
assign 理论上:所有数据类型都支持。 实际上:供基本数据类型,delegate使用。
retain 所有对象类型的数据都支持,包括系统提供的类,自定义的类。
copy 所有遵守NSCopying协议的对象都支持。

属性实现的时候,编译器默认实现了setter、getter方法。但是也可以在类的内部,自己实现setter、getter方法,不再执行编译器实现的方法。

声明name的属性:@property (nonatomic, retain) NSString * name;
实现name的setter、getter方法
-(void)setName:(NSString *)name
{
// 如果_name操作的对象 与 传入的对象 不相同
if (_name != name) {
// 将_name操作的对象的引用计数减1
[_name release];
// 将传入的对象的引用计数加1,并赋值给_name
_name = [name retain];
}
}

- (NSString *)name
{
// return [[_name retain] autorelease]; 保证安全的方法。
return _name;
}

声明gender的属性:@property(nonatomic, copy) NSString * gender;
-(void)setGender:(NSString *)gender
{
if (_gender != gender) {
[_gender release];
_gender = [gender copy];
}
}

- (NSString *)gender
{
return _gender;
}
声明number的属性:@property (nonatomic, assign) NSInteger number;
-(void)setNumber:(NSInteger)number
{
_number = number;
}

- (NSInteger)number
{
return _number;
}

点语法:

点语法的简单使用:

点语法跟属性本身没有关系,只要方法的语法符合setter、getter书写格式方法的语法,都可以使用点语法。

t.name =@"zhangsan";//赋值
在赋值运算符左侧使用.语法的本质是调用对应的setter方法。
NSLog(@"%@",[t name]);//读值
NSLog(@"%@",t.name);
在赋值运算符右侧或NSLog中使用.语法的本质是调用对应的getter方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: