虽然开发IOS好多年了。但是这几个关键词总是深深困扰着我。加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了。

先说weak与assign.weak只能修饰对象,不能修饰基本数据类型。而assign既可以修饰基本数据类型,也可以修饰对象。但一般用于修饰基本数据类型。因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在。所以造成野指针。而这个野指针的内存在堆上,所以容易造成堆内存崩溃。而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针。

Strong表示指向并且拥有此对象。其修饰的对象引用计数会加1.这个对象只要他的引用计数不为0,该对象就不会被销毁。可以强行设置为nil销毁它。

那么stroing和copy的区别是什么呢?

strong是复制多个指针指向同一个地址。而copy在内存中拷贝一份对象的值。所以,指针是指向不同的地址。copy一般用在哪里呢?用在那些拥有可变类型的不可变对象上。比如NSString。你改变字符串,实际上他是新开辟了一份内存,吧值拷贝后,进行操作之后返回的新的内存地址。

再说说nonatomic以及atomic,

nonatomic是非原子性,就是可以多线程访问,效率高。

而atomic,是原子性的,属于安全级别的,同一个时刻只能有同一个线程访问,具有对资源的独占性,当然,效率低。

ios中关键词weak,assign,copy.strong等的区别的更多相关文章

  1. ios中strong, weak, assign, copy

    copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是 ...

  2. iOS中break、continue、return三者的区别

    iOS中break.continue.return三者的区别 1. break         直接跳出当前层次的循环. 如果嵌套循环如for中嵌套while,break只能跳出内层的while循环, ...

  3. ios 内存管理与property copy strong weak assign

    - (void)fun{  NSString* str = [[NSString alloc] initWithString:@"string"];  NSLog(@"% ...

  4. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段 ...

  5. assign,copy,strong,weak,nonatomic的具体理解

    例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存 ...

  6. iOS中为什么block用copy属性

    1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...

  7. iOS开发——高级篇——iOS中为什么block用copy属性

    1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...

  8. iOS中的静态库与动态库,区别、制作和使用

    如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库: ...

  9. iOS 中的静态库与动态库,区别、制作和使用

    如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库: ...

随机推荐

  1. man scp

    SCP(1)   BSD General Commands Manual   SCP(1) NAME     scp - secure copy (remote file copy program) ...

  2. vue中loding

    <template> <div class="mf-loading-container" v-show="ifShow"> <im ...

  3. tesseract库

    1.简介 # -*-coding:utf8 -*- #图形验证码识别技术 ''' 阻碍我们爬虫的,有时候是在登录或者请求一些数据时候的图形验证码.因此这里我们讲解 一种能将图片翻译成文字的技术.将图片 ...

  4. Django 分组 聚合

    base_sql = Order.objects.filter(is_paid=True, merchant=merchant_id) # 如果aggregate前没有values,得到的结果是一个字 ...

  5. shell脚本报错:syntax error: unexpected end of file

    解决办法1: vi test.sh :set fileformat=unix :wq 解决办法2: yum install dos2unix dos2unix my.sh 原因剖析: DOS下文件和L ...

  6. 上海嘉韦思杯部分writeup

    第二题 打开赛题,看到加密字符串,进行base64解密,发现是JSFUCK,再次解密,控制台得到flag. 第三题 打开频谱图得到flag,flag中有三个_,联想到音频文件详细信息中的三个zero, ...

  7. Hydra(爆破神器)

    PS:这款暴力密码破解工具相当强大,支持几乎所有协议的在线密码破解,其密码能否被破解关键在于字典是否足够强大.对于社会工程型渗透来说,有时能够得到事半功倍的效果.本文仅从安全角度去探讨测试,使用本文内 ...

  8. ssl证书 以及phpstudy配置ssl证书

    首先,确保你的Apache编译了SSL模块,这是支持SSL证书必要的条件(如果没有,请编译,[打开phpstudy]>[其他选项菜单]>[PHP扩展]>[php-openssl]前面 ...

  9. SQL- 行转列,多行转多列 - max 函数

    效果如图,把同一个 code, 按 cate 列相同行的进行合并后分两行,把mode 每种类型转换成 列名 ,主要用到了 max 函数,很实用 if exists(select * from temp ...

  10. u盘安装centos7.6 最新版本

    1,可以按照网上的教程,制作u盘启动 2,然后将u盘插入主机,最重要的是这一步,网上的说法基本上适用这个版本 进入到这个界面: 然后选择Install Centos 7,然后按e键,tab是不管用的 ...