__strong

在arc环境中默认行为,对对象进行retain。

举例

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSObject *obj = [[NSObject alloc] init];//默认指针被__strong修饰,等价于:__strong NSObject *p = obj;NSObject *p = obj;obj = nil;NSLog(@"obj = %@", p);}
复制代码

打印结果

 obj = <NSObject: 0x100706b90>
复制代码

__weak

不会对对象进行retain,当对象销毁时,会自动指向nil

举例

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSObject *obj = [[NSObject alloc] init];__weak NSObject *p = obj;obj = nil;NSLog(@"obj = %@", p);}
复制代码

打印结果

obj = (null)
复制代码

__unsafe_unretained

不会对对象进行retain,当对象销毁时,会依然指向之前的内存空间(野指针)

举例

#import <Foundation/Foundation.h>@interface Person : NSObject@end@implementation Person- (void)dealloc {NSLog(@"--dealloc--");
}@endint main(int argc, const char * argv[]) {Person *obj = [[Person alloc] init];__unsafe_unretained Person *p = obj;obj = nil;NSLog(@"obj = %@", p);
}
复制代码

打印结果

--dealloc--
obj = <Person: 0x101c5e9f0>
复制代码

对象被释放了,但如果内存没有被重新利用,那么还是能打印出Person对象;此时访问对即为"僵尸"对象。

转载于:https://juejin.im/post/5cf4ae26f265da1bc07e2352

__strong、__weak 与 __unsafe_unretained区别相关推荐

  1. iOS __strong __weak @Strongify @Weakify

    @Strongify,@Weakify主要是在block中使用. 因为block一般都在对象内部声明.. 如果在block内部使用了当前对象的属性,就会造成循环引用(block拥有当前对象的地址,而当 ...

  2. iOS内存管理知识点

    ###PART1: ARC的修饰符 ARC主要提供了4种修饰符,他们分别是: __strong __weak __autoreleasing __unsafe_unretained ####__str ...

  3. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  4. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...

  5. iOS 下ARC的内存管理机制

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  6. __block和__weak修饰符的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil __weak可以避免循环引用,但是其会导致外部对象释放了之后, ...

  7. 对copy/strong/weak/__weak/__strong/assign的使用场景总结总结

    ARC在编译期间,根据Objective-C对象的存活周期,在适当的位置添加retain和release代码.从概念上讲,ARC与手动引用计数内存管理遵循同样的内存管理规则,但是ARC也无法防止循环强 ...

  8. weak和assign的区别

    使用weak和assign修饰OC对象的区别 相同点 1.weak修饰OC对象2.assign修饰OC对象和基本数据类型 复制代码 不同点 1.成员变量 1.weak生成的成员变量是用__weak修饰 ...

  9. oc 协议 回调 静态成员_OC底层原理探究:Category、关联对象和block本质

    1.分类Category的使用 // 给MJPerson类添加分类 @interface MJPerson : NSObject - (void)run; @end@implementation MJ ...

最新文章

  1. DUMP3 企业级电商项目
  2. Python_logging模块
  3. SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数
  4. PMP知识点(一、全局概览)
  5. (转)Python 用hashlib求中文字符串的MD5值
  6. hdu 5036 Explosion bitset优化floyd
  7. linux centos7安装ngix,centos7 环境下安装nginx--Linux
  8. 字符串的模式匹配--BF算法KMP算法
  9. 200多个新颖独特的域名展示
  10. 访问不上服务器的任何端口
  11. 有人公开了Avast、McAfee 等杀软中的 8 个 0day
  12. opengl入门(ubuntu版)(一)
  13. Git(9):通俗易懂的Git指令
  14. 【SVN】解决SVN安装语言包后无法选择中文的问题
  15. 网卡82546驱动linux,Dell服务器常见Linux驱动选择
  16. 程序员装b指南(转)
  17. 大国崛起(三) 大不列颠及北爱尔兰联合王国(英国)
  18. 判断一个数字是不是素数
  19. 华硕笔记本很久没用开机后无法进入系统自动跳转bios界面的解决方法
  20. vue项目屏幕自适应_vue项目自适应屏幕和浏览器

热门文章

  1. 把1,2,3…n*n 的数字按照顺时针螺旋的形式填入数字矩阵
  2. CV学习笔记-BP神经网络训练实例(含详细计算过程与公式推导)
  3. 汇编和c语言函数的参数传递,c文件汇编后函数参数传递的不同之处
  4. 监控mysql锁定状态_Shell脚本监控MySQL主从状态
  5. educoder实训平台python顺序结构答案_传智播客升级实训课程,打造高分项目实战网课助力高校在线实训...
  6. 计算机字长与下列哪项指标密切相关,组成原理与汇编语言-中国大学mooc-题库零氪...
  7. oracle数据块坏,Oracle数据块损坏解决办法
  8. rds 数据库营销报告_《营销自动化从入门到精通》第五章 集成营销自动化工具与CRM...
  9. android模拟点击webview,的Android的WebView点击模拟
  10. suse 调整分区_安装suse linux如何手工分配各个分区大小?