博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 声明属性关键字讲解
阅读量:4111 次
发布时间:2019-05-25

本文共 1248 字,大约阅读时间需要 4 分钟。

atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面默认的就是atomic,意思就是setter/getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于函数头尾加了锁. 这样的话并发访问性能会比较低.

nonatomic: 非原子操作 一般不需要多线程支持的时候就用它,这样在并发访问的时候效率会比较高. 在objective-c里面通常对象类型都应该声明为非原子性的. iOS中程序启动的时候系统只会自动生成一个单一的主线程.程序在执行的时候一般情况下是在同一个线程里面对一个属性进行操作. 如果在程序中我们确定某一个属性会在多线程中被使用,并且需要做数据同步,就必须设置成原子性的,但也可以设置成非原子性的,然后自己在程序中用加锁之类的来做数据同步.

在头文件中声明属性的时候使用atomic 和 nonatomic等价于在头文件里面添加2个函数一个是用于设置这个属性的,一个是用于读取这个属性,例如:- (nsstring *)name; - (void)setName:(NSString *)str;

atomic / nonatomic 需要和@synthesize/@dynamic配和使用才有意义.

@synthesize 如果补实现setter和getter方法,编译器将会自动在生产setter和getter方法。

@dynamic 表示变量对应的属性访问器方法,是动态实 现的,你需要在 NSObject 中继承而来的+(BOOL) resolveInstanceMethod:(SEL) sel 方法中指定 动态实现的方法或者函数。

属性修饰其他关键字:

getter=getterName

指定get方法,并需要实现这个方法。必须返回与声明类型相同的变量,没有参数

setter=setterName

指定set方法,并需要实现这个方法。带一个与声明类型相同的参数,没有返回值(返回空值)

当声明为readonly的时候,不能指定set方法

readwrite

如果没有声明成readonly,那就默认是readwrite。可以用来赋值,也可以被赋值

readonly

不可以被赋值

assign

所有属性都默认assign,通常用于标量(简单变量 int, float,CGRect等)

一种典型情况是用在对对象没有所有权的时候,通常是delegate,避免造成死循环(如果用retain的话会死循环)

retain

属性必须是objc对象,拥有对象所有权,必须在dealloc中release一次。

copy

属性必须是objc对象,拥有对象所有权,必须在dealloc中release一次。且属性必须实现NSCopying协议

一般常用于NSString类型

转载地址:http://biosi.baihongyu.com/

你可能感兴趣的文章
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>
pytorch(6)
查看>>
opencv 指定版本下载
查看>>