一.强弱引用

强引用:strong reference

弱引用:weak reference

引用可以理解为指针A指向的对象B。换句话说,拥有指针A的对象是对象B的所有者(ownership).

区别:其中strong就相当于retain属性,而weak相当于assign。

1.一般的引用都是强引用。但为什么又提出弱引用呢?

弱引用的提出是为了防止强引用出现reference cycle,也就是指向的死循环,如果出现死循环,容易出现内存泄漏。

2.弱引用的特点是什么?如何使用弱引用?

__weak BNRItem *_container;//使用“__weak”

  • 多个对象A引用某个对象B,都会retain。但是当你指定弱引用后,就不会retain。当对象引用数为0的时候,自动释放,并让把使用弱引用的指针,设置为nil
  • 当对象A使用弱引用,对象A释放空间的时候,指针会变成nil

其他:nonatomic与atomic主要面对的是线程安全的问题,当然使用atomic更安全,获取数据更准备,使用nonatomic,会更高效,原因就是在于加锁的缘故嘛。但是苹果开发一般都使用的是nonatomic

二.properties

@propery NSString *itemName;

此语句做了三件事情:一个实例变量,两个访问实例变量的方法。

propery的属性:

@property (nonatomic, readwrite, strong) NSString *itemName;

  • 多线程属性:有两个值,atomic和nonatomic,默认是使用atomic,但是大多数程序使用nonatomic,其实就是选择是否采用原子操作的问题。例子:@property (nonatomic)NSString *item;
  • 读/写属性:有两个值,readwrite 和readonly ,默认都是readwrite,如果选择readonly,则只有get属性。
  • 内存管理属性:有四个值,strong,weak,copy ,unsafe_unretained,这个属性主要用来描述对象的实例变量指针引用类型。

unsafe_unretained是一个直接的assign。没有retain计数,如果变量指向的对象已经销毁了,其指针值不会自动设置为nil。但是weak属性是可以的,一般用在非对象的引用中。

copy是复制一份数据,能够防止其他拥有者改变数据内容受到的影响

如果你有更多的需求,则可以自己建立,setItem,item方法。

objective-c 强弱引用、properties的学习的更多相关文章

  1. OC强弱引用的使用规则

    强弱引用的唯一区别只是体现在对象的消亡上. 当一个对象不再有强引用指向它时,它就会被销毁. 弱引用不持有对象,不计入自动引入计数,所以不用考虑它销毁的问题.

  2. Spring如何引用properties文件里的…

    [zt]Spring如何引用properties文件里的配置 来自 http://blog.csdn.net/luobo525/archive/2006/11/06/1370258.aspx 1.Pr ...

  3. java.util.Properties类 学习笔记

    学习目标:   1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...

  4. spring如何引用properties文件里的配置

      1.PropertyPlaceholderConfigurer类它是把属性中的定义的变量(var)替代,spring的配置文件中使用${var}的占位符 <beans><bean ...

  5. spring源码学习(三)--spring循环引用源码学习

    在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...

  6. 关于Java配置文件properties的学习

    在Java早期的开发中,常用*.properties文件存储一些配置信息.其文件中的信息主要是以key=value的方式进行存储,在早期受到广泛的应用.而后随着xml使用的广泛,其位置渐渐被取代,不过 ...

  7. java 强弱引用

    ava中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了 ...

  8. Properties类学习笔记

    1.Properties是一个hashTable子类,但它只装String类型的值2.一个Properties集中有一个子Properties集为它的默认属性集,如果在Properties中找不到相关 ...

  9. iOS应用启动原理图解 及ARC强弱引用

    iOS应用启动原理图解(红色箭头表示strong强引用,绿色箭头代表weak若引用) 只要将UI控件拖到Storyboard里控制器的大view上,Xcode会自动将这些控件以强引用的形式加入到sel ...

随机推荐

  1. Python运算符及逻辑运算

    基本运算符 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.在计算器语言中运算符大致可以分为5种类型:算术运算符.连接运算符.关系运 ...

  2. NBA投篮

    D 辅助插件:原生 游戏制作难度系数:初级 游戏教程网址:http://www.raywenderlich.com/20333/beginning-unity-3d-for-ios-part-1 1. ...

  3. ASP NET Core ---Automapper

    官方文档:http://docs.automapper.org/en/stable/index.html 一.安装和配置: 二.使用: 1.建立 Profile文件: public class Map ...

  4. Node rescue/unrescue相关代码流程图

  5. Comparable和Comparator的学习笔记

    目录 Comparable和Comparator的实现 Comparable接口 Comparator接口 总结 参考自 今天在项目开发中,遇到要对List中的对象按照对象某一属性进行排序的问题,我发 ...

  6. DOM对象转化成jQuery对象

    相比较jQuery转化成DOM,开发中更多的情况是把一个DOM对象加工成jQuery对象.$(参数)是一个多功能的方法,通过传递不同的参数而产生不同的作用. 如果传递给$(DOM)函数的参数是一个DO ...

  7. webpack的css,less,sass中使用绝对路径

    用法: 使用~表示绝对路径,如下: @import "~otherfile.scss" .yourClass { background: url('~img/wallpaper.p ...

  8. 做一个类似JQuery获取DOM对象的$()

    在dom操作时,有时根据id获取单个对象.有时根据className获取多个对象.平常可能我们用两个函数来实现这两个功能.不过我将它们整合了一下,目前使用情况良好,函数如下: view source ...

  9. [03]使用阿里RAP搭建前端Mock Server

    MockServer可以减少前端开发对后端的依赖,提高前端开发的效率,同时也利于团队的协作. 什么是RAP? RAP是阿里团队出的一款WEB接口管理工具,帮助开发人员更高效的管理接口文档,同时通过分析 ...

  10. Spring 中解析 URL参数的几种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...