美文网首页
关于assign修饰对象

关于assign修饰对象

作者: 简单Timor | 来源:发表于2021-08-07 09:57 被阅读0次

assign 在OC中一般是用来修饰基础数据类型。引用计数不会+1,修饰基础数据类型的时候,放在栈上,由系统自动管理内存空间,自动释放。


但是如果我们用assign 去修饰对象呢?比如NSString,NSArrary等。

我们知道当对象创建,如果此时在堆区是需要我们手动释放的。

此时因为assign 没有使引用计数+1,当作用域结束对象释放时,此时有可能对象指针会得不到释放,导致出现野指针错误。


延伸:weak 不会使引用计数+1,为什么能修饰对象?不会造成野指针吗?

不会。weak 和assign 不同之处在于,weak 有一个由系统自己管理的weakTable, 当对象释放的时候,weaktable 会根据指针地址找到对象指针并置空,所以不会出现野指针错误


猜想:为什么xib 拖拽控件的时候使用weak?

我认为当拖拽控件的时候,此时UIViewController的View是被强引用的。 此时拖拽控件的生命周期与View一致,为保证当前类释放时,所有控件自动释放置空的目的,所以使用weak 修饰


偶然看到关键词的问题,这里做个记录。其中包含了自己的猜想部分,没有验证其是否完全正确。仅供参考。如果有不对的地方,请各位指出。谢谢。

相关文章

  • 关于assign修饰对象

    assign 在OC中一般是用来修饰基础数据类型。引用计数不会+1,修饰基础数据类型的时候,放在栈上,由系统自动管...

  • iOS中的关键字,深拷贝和浅拷贝。

    weak 和assign 的区别weak修饰对象,assign可以修饰基本数据类型和对象 不过weak修饰对象,...

  • weak和assign的区别

    weak只能修饰对象 assign可以修饰对象也可以修饰基本数据类型 weak和assign的区别就是可修饰的变量...

  • Runtime运行时四:weak的实现原理

    weak & assign weak修饰对象赋值方式:复制引用对象销毁后自动置为nill assign修饰基本数据...

  • assign修饰对象

    assign 可以修饰对象的,由于assign 修饰的对象不是强引用,在调用的时候会操作对象已经释放,也就是野指针...

  • 内存管理相关

    一、ARC管理内存是使用assign还是weak? assign: 可以修饰基本数据类型,也可以修饰对象。修饰代理...

  • assign,weak,strong,copy的区别

    1.assign 与 weak 区别 assign其实也可以用来修饰对象,那么我们为什么不用它修饰对象呢?因为被a...

  • iOS中assign引用对象为什么不会被置为nil

    一、assign和weak的区别? assign是MRC和ARC下都有的,可用来修饰对象和基本数据类型,当修饰对象...

  • #4- strong copy assign weak __

    1.assign 与weak区别 assign 常用来修饰 基本数据类型,weak常用来修饰对象对象,且是一个弱引...

  • assign和weak

    区别 weak只能修饰对象assign可修饰对象和基本数据类型,修饰对象时,相当于unsafe_unretaine...

网友评论

      本文标题:关于assign修饰对象

      本文链接:https://www.haomeiwen.com/subject/tbpwvltx.html