成都网站建设设计

将想法与焦点和您一起共享

iOS开发OC基础:OC属性的一些概念和基本使用-创新互联

一、属性简介

我们提供的服务有:成都网站设计、成都网站建设、微信公众号开发、网站优化、网站认证、瓯海ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的瓯海网站制作公司

//属性是OC2.0之后新出的一种语法,能让我们快速的生成setter以及getter方法,大大简化代码

二、如何定义一个属性

//@property 属性关键字,用来定义属性

//NSString * 属性的类型

//name 属性的名字。

//@property 只是生成的setter以及getter方法的声明。
@property NSString *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];

//}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:iOS开发OC基础:OC属性的一些概念和基本使用-创新互联
新闻来源:http://chengdu.cdxwcx.cn/article/dicppd.html