【@property的特性】
来源:互联网 发布:vscode spring boot 编辑:程序博客网 时间:2024/06/05 10:55
@property还有⼀一些关键字,它们都是有特殊作⽤用的,⽐比如上述代码中的nonatomic,strong:
@property(nonatomic,strong) NSString *carName;
@property(nonatomic,strong) NSString *carType;
一、原⼦子性
atomic(默认):atomic意为操作是原⼦子的,意味着只有⼀一个线程访问实例变量。atomic是线程安全的,⾄至少在当前的存取器上是安全的。它是⼀一个默认的特性,但是很少使⽤用,因为⽐比较影响效率,这跟ARM平台和内部锁机制有关。
nonatomic:nonatomic跟atomic刚好相反。表⽰示⾮非原⼦子的,可以被多个线程访问。它的效率⽐比atomic快。但不能保证在多线程环境下的安全性,在单线程和明确只有⼀一个线程访问的情况下⼲⼴广泛使⽤用。
二、存取器控制
readwrite(默认):readwrite是默认值,表⽰示该属性同时拥有setter和getter。
readonly: readonly表⽰示只有getter没有setter。
有时候为了语意更明确可能需要⾃自定义访问器的名字:
@property (nonatomic, setter = mySetter:,getter = myGetter ) NSString *name;
最常⻅见的是BOOL类型,⽐比如标识View是否隐藏的属性hidden。可以这样声明:
@property (nonatomic,getter = isHidden ) BOOL hidden;
三、内存管理
@property有显⽰示的内存管理策略。这使得我们只需要看⼀一眼@property声明就明⽩白它会怎样对待传⼊入的值。
assign(默认):assign⽤用于值类型,
如int、float、double和NSInteger,CGFloat等表⽰示单纯的复制。还包括不存在所有权关系的对象,⽐比如常⻅见的delegate。
@property(nonatomic) int running; @property(nonatomic,assign) int running;
以上两段代码是相同的。
在setter⽅方法中,采⽤用直接赋值来实现设值操作:
-(void)setRunning:(int)newRunning{
_running = newRunning;
}
retian:在setter⽅方法中,需要对传⼊入的对象进⾏行引⽤用计数加1的操作。
简单来说,就是对传⼊入的对象拥有所有权,只要对该对象拥有所有权,该对象就不会被释放。如下代码所⽰示:
-(void)setName:(NSString*)_name{ //⾸首先判断是否与旧对象⼀一致,如果不⼀一致进⾏行赋值。 //因为如果是⼀一个对象的话,进⾏行if内的代码会造成⼀一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,⽽而达不到赋值⺫⽬目的。 if ( name != _name){
[name release]; name = [_name retain]; }
}
strong:strong是在IOS引⼊入ARC的时候引⼊入的关键字,是retain的⼀一个可选的替代。表⽰示实例变量对传⼊入的对象要有所有权关系,即强引⽤用。strong跟retain的意思相同并产⽣生相同的代码,但是语意上更好更能体现对象的关系。
weak:在setter⽅方法中,需要对传⼊入的对象不进⾏行引⽤用计数加1的操作。
简单来说,就是对传⼊入的对象没有所有权,当该对象引⽤用计数为0时,即该对象被释放后,⽤用weak声明的实例变量指向nil,即实例变量的值为0。
注:weak关键字是IOS5引⼊入的,IOS5之前是不能使⽤用该关键字的。delegate 和 Outlet ⼀一般⽤用weak来声明。
copy:与strong类似,但区别在于实例变量是对传⼊入对象的副本拥有所有权,⽽而⾮非对象本⾝身。
- 【@property的特性】
- 【OC】@property的特性
- Python 类的魔力特性之一:property
- 关于Dom元素的属性(property)和特性(attribute)
- Python中property属性(特性)的理解
- DOM元素的特性(Attribute)和属性(Property)
- Python中使用property实现类的特性
- DOM元素的特性(Attribute)和属性(Property)
- DOM元素的特性(Attribute)和属性(Property)
- Object-C中的特性-----property
- OC中的属性特性(Property)
- 16.3 Python descriptor-property(特性)
- [原创]深入理解C#3.x的新特性(4):Automatically Implemented Property
- OC 中"烦人"的小特性之getter和setter以及property编译指令
- jQuery学习<六> — — Dom元素的特性(attribute)和属性(property)
- python学习笔记2:面向对象的高级特性2 @property
- 特性 property 类别 category 协议 protocol
- [Ant][StartWithAnt] 第三章 特性property
- Android Studio之新建Studio项目
- Hdu 2066 一个人的旅行(dijkstra算法)
- Web.xml配置详解之context-param
- 优化算法的比较,选择
- hive优化
- 【@property的特性】
- Hibernate单向关联1-N
- 【暑期基础2】O HDU 2040 亲和数
- iOS绘图API的使用
- spring配置中mappingResources和mappingLocations
- mysql左连和右连
- hdoj 5289 Assignment 【RMQ + 二分查找区间最优长度】
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
- 字典的常用方法(含可变字典)