关于assign修饰对象



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


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

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

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


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

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


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

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


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

你可能感兴趣的:(关于assign修饰对象)