美文网首页将来跳槽用iOS面试题+基础知识
iOS 用assign修饰对象会怎么样?

iOS 用assign修饰对象会怎么样?

作者: bugLife丶 | 来源:发表于2020-07-03 16:44 被阅读0次

众所周知,iOS开发中,assign和weak都是弱引用,基础数据类型我们一般都是用assign修饰,而对象一般都是用weak修饰的。那么问题来了,如果用assign修饰对象,会产生什么的后果?

在弄清之前,我们首先要了解一下内存管理机制。我们初始化一个对象如下:

Objct *obc =[ [Objct alloc]init];

@property(assign)int a;

@property(assign) Objct  *obc;

对于以上 Objct 对象内存分配控件存在于堆上,而地址指针obc存在于栈上。对于a,内存空间存在于栈上面,都知道存在栈上面的由系统统一管理,不需要程序员去管理,而存在于堆上的空间需要程序员去手动管理的,当我们将对象销毁的时候,对象的内存空间释放,存在于栈指针也会nil,就不会产生野指针了。回到上面问题,如果用assign修饰一个对象后,当对象被释放后,存在于栈上的指针还是存在的,假如此时使用指针,它就是一个野指针了,就容易造成程序崩溃,如果是用weak修饰的对象,则不会产生上面的情况,因为对象销毁的时候,系统会将指针置nil,也就不会产生野指针了。

综上所述,修饰对象用weak,基础数据类型用assign。

相关文章

  • iOS 用assign修饰对象会怎么样?

    众所周知,iOS开发中,assign和weak都是弱引用,基础数据类型我们一般都是用assign修饰,而对象一般都...

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

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

  • weak、strong、copy、assign

    一、属性用weak和assign的区别 weak:用来修饰oc对象。 assign:一般用来修饰基本数据类型;也可...

  • weak和assign的区别

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

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

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

  • 知识点

    UIButton 父类是谁?UIControl assign weak 修饰的区别?为什么用weak修饰对象,而不...

  • assign修饰对象

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

  • 内存管理相关

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

  • assign,weak,strong,copy的区别

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

  • OC中retain,copy和assign的setter和get

    用retain修饰 setter 方法: 用copy修饰 setter方法: 用assign修饰 setter方法...

网友评论

    本文标题:iOS 用assign修饰对象会怎么样?

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