第八篇:编译器特性:关键字property与synthesize用法
2015-09-11 20:09
281 查看
1.property关键字:
》property 是一个编译器特性。
(1)在:xcode4.4版本以前
》用法:@property 指定成员变量类型 指定去掉下划线的成员变量名 ;
》用于在类声明中自动生成指定的 成员变量 set / get 方法(赋值 / 取值)的声明。
@interface Iphone : NSObject
{
int _cpu ;
}
//自动生成 - (void)setCpu:(int)cpu ; 和 - (int)cpu ; 两个方法的声明
@property int cpu;
@end
(2)xcode4.4版本以后property做了增强:
》帮助声明与实现:上述声明的同时,也会自动实现指定的 成员变量 set / get 方法(赋值 / 取值)。
》如果没有手动声明 成员变量,property 会在 .m 文件中自动帮助我们生成一个以"_"开头的成员变量(成员变量: _变量名 )。例如:@property int xxxx ; 则在 .m 文件中自动生成的成员变量:_xxxx。
》注意点:#如果想让子类继承父类的成员变量,还是必须在声明中手动定义成员变量。#如果你自己同时实现了一个成员变量的set / get 方法时,那么编译器不会在 .m 文件中自动成该成员变量,必须自己定义该成员变量。
2.synthesize关键字(实现):
》编译器特性。
(1) 明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 = 成员变量 ;
》用于在类的实现中自动生成给 指定的 成员变量 set / get 方法(赋值 / 取值)的实现。
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu // - (void)set变量名大写:(int)变量名
{
_cpu = cpu ;
}
- (int) cpu // - (int)变量名
{
return _cpu ;
}
*/
@synthesize cpu = _cpu ;
@end
(2) 没有明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 ;
》说明:这样会自动赋值给和 变量 同名的成员变量。等价:@synthesize 变量名 = 变量名;
》如果该类中有一个成员变量cpu,那么当这样写时:
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu
{
self->cpu = cpu ;
}
- (int) cpu
{
return self->cpu ;
}
*/
@synthesize cpu ;
@end
3.重写set / get 方法:
》当想控制外界传入的一些数据的合理性安全性的时候,我们就需要手动实现set 方法。
》再次强调:当我们手动同时实了一个成员变量的set / get 方法的时候,property 就不会自动给我们生成成员变量。
》property 是一个编译器特性。
(1)在:xcode4.4版本以前
》用法:@property 指定成员变量类型 指定去掉下划线的成员变量名 ;
》用于在类声明中自动生成指定的 成员变量 set / get 方法(赋值 / 取值)的声明。
@interface Iphone : NSObject
{
int _cpu ;
}
//自动生成 - (void)setCpu:(int)cpu ; 和 - (int)cpu ; 两个方法的声明
@property int cpu;
@end
(2)xcode4.4版本以后property做了增强:
》帮助声明与实现:上述声明的同时,也会自动实现指定的 成员变量 set / get 方法(赋值 / 取值)。
》如果没有手动声明 成员变量,property 会在 .m 文件中自动帮助我们生成一个以"_"开头的成员变量(成员变量: _变量名 )。例如:@property int xxxx ; 则在 .m 文件中自动生成的成员变量:_xxxx。
》注意点:#如果想让子类继承父类的成员变量,还是必须在声明中手动定义成员变量。#如果你自己同时实现了一个成员变量的set / get 方法时,那么编译器不会在 .m 文件中自动成该成员变量,必须自己定义该成员变量。
2.synthesize关键字(实现):
》编译器特性。
(1) 明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 = 成员变量 ;
》用于在类的实现中自动生成给 指定的 成员变量 set / get 方法(赋值 / 取值)的实现。
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu // - (void)set变量名大写:(int)变量名
{
_cpu = cpu ;
}
- (int) cpu // - (int)变量名
{
return _cpu ;
}
*/
@synthesize cpu = _cpu ;
@end
(2) 没有明确告诉synthesize 后面的 变量 要赋值给 指定的成员变量:
》用法:@synthesize 变量名 ;
》说明:这样会自动赋值给和 变量 同名的成员变量。等价:@synthesize 变量名 = 变量名;
》如果该类中有一个成员变量cpu,那么当这样写时:
@implementation Iphone
/*
会实现:
- (void) setCpu:(int)cpu
{
self->cpu = cpu ;
}
- (int) cpu
{
return self->cpu ;
}
*/
@synthesize cpu ;
@end
3.重写set / get 方法:
》当想控制外界传入的一些数据的合理性安全性的时候,我们就需要手动实现set 方法。
》再次强调:当我们手动同时实了一个成员变量的set / get 方法的时候,property 就不会自动给我们生成成员变量。
相关文章推荐
- Apache POI组件操作Excel,制作报表(一)
- Linux学习笔记<基础概念>
- 阿里巴巴消息中间件团队消息和分布式数据层负责人王晶昱:消息系统架构与变迁
- deepin 设置su 密码
- 如何快速验证 SELinux Policy 问题
- 初级linux菜鸟玩转app开发
- 如何设置确认selinux 模式
- Centos 6.4 python 2.6 升级到 2.7
- HBase Shell相关
- How tomcat works学习笔记
- Tomcat6.0启动startup.bat一闪而过
- Ubuntu14.04下openni2以及nite2的配置-kinectv1篇
- 2013一年一度的Linux周刊读者投票结果
- shell脚本编程:将文件中指定行的内容进行替换
- 配置python3+django+linux(centos的环境)
- CentOS为火狐浏览器配置flash插件
- Linux系统中如何挂载windows共享(cifs),NFS共享,以及挂载ISO文件
- Tomcat剖析(三):连接器(1)
- Linux下的双网卡绑定bond0 em1 em2
- CentOS配置网易源