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方法。
- Objective-C 基础知识之 (十四):属性 Property 点语法
- objective-c语法学习:@property属性和点语法
- 属性,Property,点语法
- Objective-C之property属性分析
- 黑马程序员——Objective-C学习之@property @synthesize和id及点语法
- Objective-C中的@property、@synthesize及点语法
- Objective-C中的@property,@synthesize和点语法
- Objective-c语言_点语法和@property
- Objective-C语言_点语法和@property
- Objective-C的属性(property)解析:
- 黑马程序员 之 Objective-C 点语法
- Objective-C语法property详解
- Objective-C语法property详解
- Objective-C语法property详解
- Objective-C语法property详解
- Objective-C语法property详解
- Objective-C语法property详解
- Objective-C语法property详解
- MySQL学习笔记20150925时间数据类型以及字符集与varchar(M)M最大值关系
- 【软考之路】-数据结构
- BZOJ 3997: [TJOI2015]组合数学
- 类string的构造函数、拷贝构造函数和析构函数
- NSObject的描述(+description)方法和对象的描述(-description)方法,NSLog默认输出的修改(后知后觉)
- Objective-C 基础知识之 (十四):属性 Property 点语法
- 自学QT之鼠标事件
- 第九周第五天
- UVa 460 - Overlapping Rectangles
- 培训第三天
- hdu1162
- Codeforces Beta Round #3——B. Lorry
- Objective-C 基础知识之 (十五):KVC
- 实在小店在B2C平台具有一定的知名度