一、线程相关:

【atomic/nonatomic】
(1)atomic[默认属性]:OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
(2)nonatomic:非原子性访问,属性赋值的时候不加锁,多线程并发访问会提高性能。但可能会造成不安全。如果不加该属性,则默认setter/getter两个方法都是原子性事务访问。所以,atomic和nonatomic用来决定编译器生成的getter,setter是否为原子操作。

二、赋值相关:

assign 默认(缺省) 基本数据类型的赋值

retain 对象的属性声明,引用计数加1

copy  对象的属性声明,赋值一个新的对象,但是引用对象不变

copy 和retain主要用于手动管理内存,但是也可以用于自动管理内存

ARC下使用

strong 增加一个对象的引用权限(引用计数加1)

weak 不会增加一个对象的引用权限,也是用于对象

基本使用规则:

非对象类型 使用assign 可以省略不写

对象类型 使用 retain/strong

NSString  使用copy/strong

总结:assign就是直接赋值,从而可能引起1中的问题,当数据为int,float等原生类型时,可以使用assign。retain使用了引用计数,retain引起引用计数+1,release引起引用计数-1.当引用计数为0时,dealloc函数被调用,内存被回收

【strong和weak】/ ARC下使用
(1)strong[默认值]:表明这是一个强引用。相当于retain属性。只要引用存在,对象就不能被销毁。当所有强引用消除时,对象才能被释放。
(2)weak:弱引用。相当于assign属性。一般为了避免retain cycles(就是父类中含有子类,父类retain了子类;子类中又调用了父类,子类又retain了父类),导致无法release,才会使用weak。
小结:(ARC下)你是不能使用retain,release,autorelease这些方法的,因为ARC会在必要的地方自动插入这些语句。所以我们需要在对象属性加上strong或者weak。

例子如下:

@property(nonatomic,assign) NSInteger number

Objective-c属性修饰关键字(assign retain copy strong weak)相关推荐

  1. 【转】Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)...

    assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. assign:简单 ...

  2. assign/retain/copy各内存管理特性的差异

    MRC下各内存管理特性 assign特性 当数据类型为int.float等原生类型时,可以使用assign,否则可能导致内存泄露.例如当使用malloc分配了一块内存,并把它的地址赋值给了指针a,后来 ...

  3. copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理

    copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协 ...

  4. assign, retain, copy, weak, strong

    一.assign, retain, copy 的区别(引用计数 RC reference count) 参考:IOS基础:retain,copy,assign及autorelease 1. 假设你用m ...

  5. assign,copy,strong,weak,nonatomic的具体理解

    例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:   1 在堆上分配一段内 ...

  6. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:   1 在堆上分配一 ...

  7. 对copy/strong/weak/__weak/__strong/assign的使用场景总结总结

    ARC在编译期间,根据Objective-C对象的存活周期,在适当的位置添加retain和release代码.从概念上讲,ARC与手动引用计数内存管理遵循同样的内存管理规则,但是ARC也无法防止循环强 ...

  8. Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系...

    平时用strong.retain.assign.weak这几个关键字的时候,也没有过多的在意,下边就MRC.ARC模式下,每个关键字做一下总结.为了简明期间,采用表格的形式进行展示. MRC ARC ...

  9. retain/copy/assign区别

    转自:http://blog.csdn.net/pjk1129/article/details/6457048#comments 在iphone程序中,属性合成中的retain/copy/assign ...

最新文章

  1. git clone 加速小技巧
  2. c与c++中struct区别
  3. 分布式、高并发、多线程,到底有什么区别?
  4. python生成柱状图 不显示_python – Matplotlib图表不显示在PyCharm中
  5. 面试官:高并发下重启服务,接口调用老是超时,你有什么解决办法?
  6. vue ---- 将项目打包发布
  7. c语言3到7位水仙花数流程图_C语言入门基础整理
  8. 使用libyuv对YUV数据进行缩放,旋转,镜像,裁剪等操作
  9. 机器学习算法一之基于K均值聚类算法实现数据聚类及二维图像像素分割
  10. 合宙 air720 模块通过串口助手连接到阿里云 IOT
  11. python对行为进行推理_一道有意思推理题,用python来解答
  12. 从零开始学前端 - 16. JS对象Object介绍及常用方法
  13. Jenkins自动化构建vue项目然后发布到远程服务器
  14. Uncaught TypeError: Cannot read property 'name' of null怎么处理
  15. kindeditor图片上传配置水印
  16. jenkins构建报错“Error occurred during initialization of VMCould not reserve enough space for 2097152KB”
  17. 用requests的get检验电视直播源是否有效的方法
  18. Excel高级筛选操作图解
  19. 开源DevOps工具在平台的未来
  20. 可编程电源秒变晶体管伏安特性测试仪

热门文章

  1. xamarin 加载图片
  2. 一个月赚5万美元--国产共享软件开发者周奕3
  3. piwik java访问api_piwik api 返回参数中文对应
  4. c语言 数据溢出时会输出什么
  5. 1080 MOOC期终成绩 (25 分) java 题解
  6. Piles-with-stones
  7. 《洛克菲勒留给儿子的38封信》 第二封:运气靠策划
  8. 转:一小时了解数据挖掘①:解析常见的大数据应用案例
  9. 运用Python制作你心目中的完美女神脸!
  10. 计算机视觉:图片数据的预处理