OC之属性

原创 2015年11月19日 10:03:23


属性的出现简化了程序的代码量,并且增加了实例变量的访问安全性
属性的属性:给属性提供一些关键字,用来控制settergetter方法的实现细节
这些关键字我们称为属性
属性的attribute一共分为三大类:
第一大类:读写性的控制readonly,readwrite,setter,getter
readonly:只读属性,告诉编译器,只声明getter方法,而没有setter方法(只能读取值,不能赋值)
readwrite:读写属性,告诉编译器既声明setter方法,又声明getter方法,readwrite是属性读写性控制的默认修饰词
第二大类:原子性的控制(atomicnonatomic
atomicsettergetter方法在多线程访问下是绝对安全的,即系统在settergetter方法内部做了很多多线程安全的处理操作。
atomic是原子性控制的默认设置
nonatomicsettergetter内部不会做过多得多线程方面的处理,仅仅是普通的setter,getter方法。
在开发过程中msettergetter方法处处都使用,如果使用atomic修饰,settergetter方法内部会做很多多线程安全的操作,会很占用系统资源,降低系统性能所以在开发中原子性一般设置为nonatomic,只有在需要线程安全的地方才使用atomic
第三大类:语义设置(assignretaincopy
assignsetter内部是直接赋值
retainsettergetter内部实现会做内存优化
如果属性是非对象性(比如intfloat、或者构造类型:结构体),属性的语义设置使用关键字assign
如果属性是对象类型(NSStringNSArrayNSDic)属性的设置用retain
如果属性是对象类型并且想得到参数的copy,使用关键字copy
*的语义设置用retain,不带*的语义设置用assign
assign,用于基本数据类型
-(void)setA:(int)a{
_a=a;
}
retain,通常用于非字符串对象
-(void)setA:(Car *)a{
if(_a!=a){
[_a release];
_a=[a retain];
}
}
copy,通常用于字符串对象、block、NSArray、NSDictionary
-(void)setA:(NSString *)a{
if(_a!=a){
[_a release];
_a=[a copy];
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

OC 成员变量和属性的区别 .

转自:http://blog.sina.com.cn/s/blog_727bd1560101llwj.html 比如下面这个程序,aboutList,和 otherList 到底有什么不同, ...
  • huang2009303513
  • huang2009303513
  • 2014年08月08日 21:38
  • 20373

oc 关于属性声明

1.在obj2.0中可以声明属性让编译器自动合成setter和getter方法: 所用关键字:@property和@synthesize。二者需要配对使用。@property是在头文...
  • qq_23529011
  • qq_23529011
  • 2015年08月15日 15:47
  • 878

OC中对于属性的总结(@property)

在没有属性之前: 对成员变量进行修改都要用到设置器:setter来修改 Person *per =[[Person alloc] init]; 对象通过设置器对成员变量内容进行修该 ...
  • MLtianya
  • MLtianya
  • 2015年07月25日 14:56
  • 1432

OC中的Block属性

Block是苹果极力推荐使用的一个知识点,它的简单实用使其在最近几年变的特别流行,尤其是在不同类之间传值的时候,比通过代理实现要方便得多。OC中的block可以借助C中的函数指针来理解,原理基本类似,...
  • codeblshi
  • codeblshi
  • 2014年12月21日 15:14
  • 1846

OC中关于属性的一些基本定义

属性介绍: 属性是OC-2.0之后出现的语法,为实例变量提供setter、getter方法的默认实现 属性的出现简化了程序代码量,并且增强了实例变量访问的安全性 属性的属性: 给属性提供了一些...
  • zhangshichi
  • zhangshichi
  • 2015年11月12日 17:24
  • 874

OC中的属性特性(Property)

特性(Property) 使用特性我们可以避免手工编写繁琐的setter 和 getter方法,避免因为这些方法来内存的问题,同时也节省编写代码的时间。@property 新的编译器指令,主要功...
  • u014783027
  • u014783027
  • 2014年06月01日 17:05
  • 853

OC--属性修饰符

关于OC中属性修饰符,基本上是开发者面试都会被问到或者笔试遇到的题目了。由此可见它的重要性。对于开发语言来说,越是基础的东西越是应该要搞得清楚明白。...
  • m0_37681833
  • m0_37681833
  • 2017年03月08日 14:58
  • 156

OC遍历属性

属性类型和相关函数(#import ) 属性(Property)类型定义了对描述属性的结构体objc_property的不透明的句柄。 typedef struct objc_prop...
  • cubesky
  • cubesky
  • 2014年08月22日 11:40
  • 980

oc声明属性时的写法

oc声明属性时的写法方式一:直接在@interface中的大括号中声明。 @interface MyTest : NSObject{ NSString *mystr; }方式二:在@inter...
  • zheshimingzi
  • zheshimingzi
  • 2015年11月24日 10:44
  • 879

oc运行时获取类属性列表

- (NSArray *)propertys { unsigned int count = 0; //获取属性的列表 objc_property_t *propertyList...
  • u014212588
  • u014212588
  • 2016年02月28日 15:33
  • 1454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC之属性
举报原因:
原因补充:

(最多只允许输入30个字)