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

来源:互联网 发布:环境破坏的资料数据 编辑:程序博客网 时间:2024/05/16 13:05

属性

@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方法。


0 0
原创粉丝点击