当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS 对象属性详细介绍

iOS 对象属性详细介绍

2019年07月24日  | 移动技术网IT编程  | 我要评论

蔡沛然 人鱼线,精品文章网,抽风娘亲敛财娃txt

ios 对象属性

oc对象的一些属性:

retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained

下面来分别讲讲各自的作用和区别:

retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 release 旧值再 retain 新值,所有实现都是这个顺序

- (void)setbackview:(uiview *)backview {

  if (_backview != backview) {

    [_backview release];

    _backview = [backview retain];
  }

  return _backview;
}

copy, 拷贝,新开地址,内容拷贝, setter 方法进行 copy 操作,与 retain 处理流程一样,先旧值 release ,再 copy 出新的对象, retaincount 为 1 。这是为了减少对上下文的依赖而引入的机制。

(提一点深拷贝shallow copy,浅拷贝deep copy)

这篇文章比较直观(http://blog.csdn.net/omegayy/article/details/7311839)

官方文档(https://developer.apple.com/library/mac/documentation/cocoa/conceptual/collections/articles/copying.html)

copy和mutablecopy调用后表现的行为到底是什么样完成取决于类本身nscopying和nsmutablecopying协议是如何实现的。

 strong, 强引用,计数器加1,和retain一样(对应retain和copy)

weak,弱引用

strong 用来修饰强引用的属性;

@property (strong) someclass * aobject; 
对应原来的 
@property (retain) someclass * aobject; 和 @property (copy) someclass * aobject; 

weak 用来修饰弱引用的属性;
@property (weak) someclass * aobject; 
对应原来的 
@property (assign) someclass * aobject; 

__weak, __strong 用来修饰变量,此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。
__strong 是缺省的关键词。
__weak 声明了一个可以自动 nil 化的弱引用。
__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

strong和weak的区别

(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。

一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。

可能有个例子形容是妥当的。

想象我们的对象是一条狗,狗想要跑掉(被释放)。

strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。

weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。

只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。

assign,用于简单类型,计数器不加,直接赋值,一个指针,一块地址, setter 方法直接赋值,不进行任何 retain 操作,为了解决原类型与环循引用问题

readonly,只读,只生成get方法,没有set方法

readwrite,默认,可读写,set,get方法都会生成

unsafe_unretained,类似weak,所谓的unsafe就是指会容易出现也指针的情况,慎用

setter = xxxx,声明对象的set方法

getter = xxxx, 声明对象的get方法

nonatomic,非原子操作,系统不添加代码,运行速度相对快,但数据操作在多线程情况下相对不安全

atomic,原子操作,编译时会增加很多加锁解锁代码,数据操作在多线程情况下相对安全

* 使用assign: 对基础数据类型 (nsinteger)和c数据类型(int, float, double, char,等)
* 使用copy: 对nsstring
* 使用retain: 对其他nsobject和其子类

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网