zoukankan      html  css  js  c++  java
  • iOS中copy,retain,strong,assign,weak的区别以及使用

    使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
    使用copy: 对NSString
    使用retain: 对其他NSObject和其子类

    assign就是简单的赋值,不更改引用计数,所以直接使用基础数据

    copy是直接拷贝内容,成为一个新的对象。

    retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1

    retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象

    在ARC中,retain和strong是一致的(声明为强引用);assign和weak是基本一致的(声明为弱引用)

    =======弱引用(weak,assign)的出现缘由,以及区别=======================================

    弱引用的出现缘由:防止循环应用。

    强引用循环:A对象强引用了B对象,B对象也强引用了A。因为都是强引用,也就是无论是A是B都要在对方的引用断了后才能销毁,但要断了引用,就必须对方对象销毁。就会出现这种僵局,为了避免出现这种情况,就应该有一个对象“示弱”,使其为“弱引用”。 weak和assign的区别就是当对象被销毁后,weak会把指针指向的对象置为nil,而assign却不会,所以assign会引起野指针,比较危险。

    比较常见的,视图中的父子视图之间的引用:父视图强引用子视图,子视图弱引用父视图。

    ===atomic与nonatomic====================================================

    atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

  • 相关阅读:
    Pytorch学习(一)基础语法篇
    CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
    理解DP(持续更新)
    LeetCode题解 | 215. 数组中的第K个最大元素
    快速排序
    浅谈设计模式(java)——从lol来看观察者模式
    <小虾米的android学习之旅1>Android框架
    程序员如何用技术变现?
    为了反击爬虫,前端工程师的脑洞可以有多大?
    如何成为一名爬虫工程师?(顺带提供工作机会)
  • 原文地址:https://www.cnblogs.com/heyuanbo/p/5142588.html
Copyright © 2011-2022 走看看