零基础iOS开发学习日记-一些小点

351 阅读1分钟

开头

深拷贝与浅拷贝

  • 浅拷贝,复制房号。将一个属性的地址,指向要另一个属性的地址,值会被同时改变
  • 深拷贝,搬家。将一个属性的值,复制粘贴到另一个属性、新地址中,值不会被同时改变

对应到OC中

  • KVC的赋值方式,本质上是将模型对象属性的地址指向数据中值的地址,进行的是浅拷贝,所以要将对象中的属性定义为copy进行深拷贝。特别的,当要将NSString通过浅拷贝赋值给NSNumber时,会出错,是因为错误的指向了类,所以要通过copy将内容拷贝一份赋值

Block

  • 栈中的对象随时会被销毁,再次调用空对象,会导致崩溃
  • block是被存储在栈中的,经过ARC处理后,存储到堆上的,所以在MRC的情况下,block作为属性时要用copy修饰,复制粘贴到堆区,也就是进行了深拷贝,赋值到了一个新的地址,拥有了block的所有权,防止生成僵尸对象