iOS assign,weak,strong等属性和引用计数

作者&投稿:诸卫 (若有异议请与网页底部的电邮联系)
~

1、 assign
assign主要用来修饰基本数据类型,例如int,float,NSInteger,CGFloat,储存在栈中内存不需要管理,一般不修饰对象,不然对象内存地址被释放,但是指针不会释放就会造成野指针。
2、 weak
weak只能用来修饰对象,但是并不持有,引用计数不会+1。在Runtime中对该属性进行了操作,指向的内存被释放后(引用计数为0),指针就会自动=nil,多用于避免循环引用的地方。 weak原理
3、 strong,retain
strong用来修饰对象并持有,引用计数会+1,正常情况指向的对象不会被销毁,可以手动置为空指针来减少引用计数,引用计数为0则销毁对象,ARC下的strong相当于MRC下的retain(ARC用retain效果和strong一样)。
4、 copy
和strong类似,如果对象里面没有支持NSCopying协议执行copyWithZone方法,那和strong效果基本一样,对象引用计数会+1,不拷贝新的对象出来。反之,copy所指向的是一个拷贝出来新的对象,引用计数为1,多半用于修饰可变类型的不可变对象NSString,NSDictionary,NSArray。 copy之深浅拷贝详解
5、 unsafe_unretained
unsafe_retain类似weak一样,不过内存如果被释放了,指针依旧保存着之前的地址,变成野指针了,访问就会crash,所以他是不安全的。

总结
1、weak后student引用计数 = 1
2、strong后student引用计数+1 = 2
3、retain后student引用计数+1 = 3
4、copy后student引用计数+1 = 4 // 没有实现copyWithZone方法,不然引用计数不变还是3,但是cyStu所指向的对象不是student了。




南部县19527121430: iOS中assign和weak修饰符的区别 -
薛享阿魏: 第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数、2.其友元函数访问.不能被任何其他访问,该类的对象也不能访问. protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问.但不能被...

南部县19527121430: iOS 创建代理属性用assign和weak的区别 -
薛享阿魏: 在cmd下输入 doskey xiaohei=dir doskey dir=echo bad command or file name 现在dir命令将无法使用,由我设置的xiaohei代替了.输入dir显示Bad Command Or File Name,而输入我自己设置的xiaohei,就是以前dir一样的功能.知道这个用法,我们还可以使fdisk、format、deltree等危险的命令失效.

南部县19527121430: ios中代理为什么要用weak修饰 -
薛享阿魏: 在代理中,其实也不是用weak来修饰.在MRC的时候是用assign来修饰,在ARC之后用 unsafe_unretained,作用是跟weak类似的.主要是为了防止循环引用.比如A引用了B,B引用了C,C又引用了A,这样循环引用之后,如果用strong强引用来修饰,这个代理就永远释放不掉了.

南部县19527121430: iOS中深拷贝,浅拷贝和retain的区别 -
薛享阿魏: 浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“对象永远只有一个",浅拷贝使对象的引用计数器+1.代码如下:可以看出不可变字符串的指针指向了同一地址,并没有重新开辟内存.深拷贝:深拷贝是对object对...

南部县19527121430: 如何在 iOS 中解决循环引用的问题 -
薛享阿魏: 循环引用,指的是多个对象相互引用时,使得引用形成一个环形,导致外部无法真正是否掉这块环形内存.其实有点类似死锁.举个例子:A->B->C->....->X->B ->表示强引用,这样的B的引用计数就是2,假如A被系统释放了,理论上A会自动减...

南部县19527121430: ios property 属性有哪些修饰符 有什么作用 -
薛享阿魏: 1.读写性修饰符:readwrite readonlyreadwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法.readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法2.setter相关修饰符...

南部县19527121430: ARC下OC对象使用assign和使用weak的区别 -
薛享阿魏: @interface ViewController () @property(weak,nonatomic)Persion *p; @property(weak,nonatomic)BOOK *b; @end @implementation ViewController - (void)viewDi...

南部县19527121430: 知乎上的一个怎么面试iOS工程师的问题 -
薛享阿魏: 1. 可以先叫她做一套笔试题 2. 然后针对笔试上面的题目,叫她具体的作答,应用场景 3. 问一些基础的问题,然后就是问一些底层的内容 4. 最后就是问一些公司业务逻辑要用到的内容,比如推送,分享,聊天的一些东西等等

南部县19527121430: ios delegate用什么修饰 -
薛享阿魏: 最近在review自己之前的代码发现了循环引用,ViewController和View相互持有的的问题,经层层排除发现问题出现在代理修饰和这个代理我又Block中使用了,问题暴露了.(注释:如果你也遇到同样的问题,你需要查看你的属性修饰、是采取...

南部县19527121430: 关于一些UI的property应该使用retain、strong还是weak还有其他一些问题
薛享阿魏: 我只说说我自己的理解哈:1、对于retain来说,一般指的是指针,这些属性需要保存引用计数,防止出现僵尸的情况,当时对于NSString类型,这个不是retain,而是copy,但是对于strong来说,这些你都不需要考虑,它会自己判断是选择retain...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网