@property? @property?说说他身后的事情。
@property 后面可以有哪些修饰符?
1.线程安全的 aaomic、nonatomic
2.访问权限的 readonly、readwrite
3.内存管理(ARC) assign、strong、weak、copy
4.内存管理(MRC) assign、retain、release
5.指定方法名称 setter = 、getter =
围绕头上 想到的一些问题~
什么情况使用 weak 关键字,相比 assign 有什么不同?
首先我们要先去了解 weak 与 assign 是什么。
weak
弱引用,只是单纯的引用某个对象,但是并未拥有该对象。既一个对象被持有无所个弱引用,只要没有强引用指向他,那么他就会被清除释放
assign
用于非指针变量。
用于基础数据类型(例如NSInteger、CGFloat)和C数据类型(int, float, double, char)另外还有id。
我们在什么时候去使用 weak呢?
1.在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如:delegate 代理属性
2.自身已经对他进行一次强引用,没必要在强引用一次,此时也会使用 weak ,自定义IBOutlet 控件属性一般也使用 weak ;当然,也可以使用 strong。
weak 与 assign 的不同点:
weak 此特质表明该属性定义了一种"非拥有关系"(nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 而assign的“设置方法”只会执行针对"纯量类型" (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。assign 可以用非 OC 对象,而 weak 必须用于 OC 对象。
怎么用 copy 关键字?
1.NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。
2.block 使用 copy 是从 MRC 遗留下来的“传统”,在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻提醒我们:编译器自动对 block 进行了 copy 操作。如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。
@property? @property?说说他身后的事情。的更多相关文章
- python - 自定制property/property的延时计算
自定制prooerty: #模拟@property 实现将类的函数属性变成类属性: #定义描述符 class msf(): def __init__(self,obj): self.obj = obj ...
- Cesium原理篇:Property
之前主要是Entity的一个大概流程,本文主要介绍Cesium的属性,比如defineProperties,Property(ConstantProperty,CallbackProperty,Con ...
- spring+jidi读取property的配置文件
在Spring项目中,你可能需要从properties文件中读入配置注入到bean中,例如数据库连接信息,memcached server的地址端口信息等,这些配置信息最好独立于jar包或者war包, ...
- python 全栈开发,Day22(封装,property,classmethod,staticmethod)
一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...
- python基础----再看property、描述符(__get__,__set__,__delete__)
一.再看property 一个静态属性property ...
- JavaScript特性(attribute)、属性(property)和样式(style)
最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...
- 【Python】[面向对象高级编程] 使用__slots__,使用@property
1.使用 __slots__ 给实例绑定方法, >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age .. ...
- 日志:using the Connector/J connection property 'autoReconnect=true' to avoid this problem
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was581 ...
- spring 中容器 map、set、list、property 的 bean 实例化
参考:http://www.kaifajie.cn/spring/9966.html <bean id="fieldMap" class="org.springfr ...
随机推荐
- SQLiteOpenHelper的使用
一.SQLiteOpenHelper的使用说明: 1. SQLiteOpenHelper时一个抽象类,子类必须实现的方法: *: onCreate(),数据库第一次被创建时调用,在里面可以执行创建表, ...
- Java Integer(-128~127)值的==和equals比较产生的思考
最近在项目中遇到一个问题,两个值相同的Integer型值进行==比较时,发现Integer其中的一些奥秘,顺便也复习一下==和equals的区别,先通过Damo代码解释如下: System.out.p ...
- CSS 日常问题总结
1.关于文本多余部分用省略号代替: http://www.cnblogs.com/hellman/p/5755376.html
- 数字图像处理作业使用OpenCV - 使用笔记
数字图像处理作业的输入图像全部都是灰度图像,所以汇总一下自己遇到的问题答案. OCV的图像容器是Mat<typename>,可以用imread(filename)读取图像,filename ...
- 关于磁盘错误disk error
到同事办公室的时候,机器的启动界面就停在磁盘错误disk error上. 首先怀疑的就是硬盘可能坏了,于是就用u盘启动,运行mhdd检测,一直到10%都没有发现错误.于是退出,重启,发现机器能够启动x ...
- SharePoint 2013 List 备份使用
在测试环境新建List后经过不懈的调整,验证终于做出一个像模像样的表单. 这时候问题来... 要怎么迁移到生产环境或者正式环境呢? 在网上找了一些资料,不过都是10的.. 其实想想13跟10区别不大, ...
- ajax 参数有中文
虽然很少会有这种情况,但是既然遇到了就记录一下.一般发请求的话如下 $.ajax({ url: "", type: 'get', data: {'name': val}, data ...
- C++ 读取txt文本内容,并将结果保存到新文本
循序渐进学习读文件 // readFile.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> # ...
- Linux安装脚本需要交互之如何实现自动安装
Linux中shell脚本运行时经常需要进行交互,比如安装软件的过程中对license声明的确认,需要输入yes,回车之类的确认信息.这个在自动化安装的时候就会是个问题. 通常对于这个问题比较灵活的解 ...
- code of C/C++(2)
初学者学习构造函数和析构函数,面对如何构造的问题,会头大.这里提供了变量(int,double,string),char *,字符数组三个类型的私有成员初始化的方法 //char * 类型的成员,如何 ...