一、属性简介
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站建设、市中网络推广、微信小程序定制开发、市中网络营销、市中企业策划、市中品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供市中建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
//属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码
二、如何定义一个属性
//@property属性关键字,用来定义属性
//NSString *属性的类型
//name属性的名字。
//@property只是生成的setter以及getter方法的声明。
@propertyNSString*name;
三、属性的使用注意事项
//如果在.m文件中我们自己实现了setter以及getter方法,则编译器就不会再帮我们生成setter和getter方法,并且也不会自动生成带下划线的实例变量。//@synthesize当给属性名指定实例变量时,先去查找对于该类有没有定义该实例变量,如果定义了,就直接使用,如果没有定义,就自动生成一个指定的实例变量,
//切记,自动生成的实例变量是私有的,子类不可访问。
//如果实例变量想让子类访问,就必须在.h文件中定义。
//@synthesize用来setter以及getter方法的实现//name属性名=实例变量名
//告诉编译器,在自动生成setter以及getter方法的内部实现时,所操作的实例变量是哪一个
//当@synthesize属性名不指定所要操作的实例变量名时,自动生成的实例变量和属性名相同//如果连@synthesize都省略的话,编译器自动生成的实例变量名就是下划线+属性名。
//@synthesize name = _name, sex = _sex, age = _age, weight = _weight;
四、属性的特性:
1.读写特性:
// (1)readonly(只读)告诉编译器只生成getter方法,不生成setter方法。
// (2)readwrite(既可读,又可写)既生成getter方法,也生成setter方法,默认是readwrite
// (3)getter =方法名,告诉编译器在生成getter方法时,方法名为指定的方法名,如果没有指定,默认的getter方法的方法名和属性相同
// (4)setter =方法名,告诉编译器在生成setter方法时,方法名为指定的方法名,如果没有指定,默认的setter方法的方法名为set +属性名(第一个字母大写)
2.原子特性:
// (1)atomic原子性,会保证线程安全,也就是说同一时间内只能有一个线程在访问,有一个加锁的过程,该线程访问结束之后,有一个解锁的过程,默认的原子特性是atomic。
// (2)nonatomic非原子性,不保证线程安全,但是效率要比atomic高很多,一般情况下使用没有问题,因为我们在使用setter和getter方法时,有时可能特别频繁,使用atomic会严重影响操作的效率,所以苹果官方推荐对于原子特性建议使用nonatomic.
3.语义特性
// (1)assign(默认)简单的赋值,主要针对于基本的数据类型,有时也可针对于对象类型;
// (2)retain该语义特性会对内存的引用计数加1,针对于对象类型(只能适用于对象)
// (3)copy该语义特性会将对象拷贝一份,然后对新的对象持有所有权,只针对于对象
五、不同语意特性的setter和getter方法的系统内部实现(我们只要了解即可)
如果属性的语义特性声明为assign,则内部生成的setter方法为:
//- (void)setName:(NSString *)name {
// _name = name;
//}
//getter方法
//- (NSString *)name {
// return _name;
//}
//如果属性的语义特性声明为retain,则内部生成的setter方法为:
//- (void)setName:(NSString *)name {
// if (_name != name) {
// [_name release];
// _name = [name retain];
// }
//}
//getter
//- (NSString *)name {
// return [[_name retain] autorelease];
//}
//如果属性的语义特性声明为copy,则内部生成的setter方法为:
//- (void)setName:(NSString *)name {
// if (_name != name) {
// [_name release];
// _name = [name copy];
// }
//}
//getter方法
//- (NSString *)name {
// return [[_name retain] autorelease];
//}
本文标题:iOS开发OC基础:OC属性的一些概念和基本使用
分享网址:http://scyingshan.cn/article/jpcghi.html