美文网首页
(七)weak 关键字

(七)weak 关键字

作者: 叔叔不吃棒棒糖 | 来源:发表于2017-06-29 15:53 被阅读24次

前言

weak弱引用,前面提到了,没有深入写,参考iOS深入学习之Weak关键字介绍这篇文章写一点,对于文章的后半部分weak如何置为nil,在以后在补充吧。

正文

weak代表弱引用,特点是不决定对象内存释放。
直接上代码吧

@property (nonatomic,strong)id strongPoint;
@property (nonatomic,weak)id weakPoint;

self.strongPoint = [UILabel new];
self.weakPoint = self.strongPoint;
self.strongPoint = nil;
NSLog(@"result is :%@", self.weakPoint);
//打印
textview[5766:1480577] result is :(null)

strongPoint是强引用的指针,此处两个指针同时指向一个对象,当strongPoint不再指向对象时,对象内存释放,weakPoint指向nil,但是如果wakPoint也是强引用就会打印如下

textview[5794:1482166] result is :<UILabel: 0x7ffab2511a70; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x608000282c60>>

因为对象还有强指针指向,所以不会释放

那么一个奇怪的事情就会发生了

@property (nonatomic,strong)id strongPoint;
@property (nonatomic,weak)id weakPoint;

self.strongPoint = [NSString stringWithFormat:@"notStrong"];
self.weakPoint = self.strongPoint;
self.strongPoint = nil;
NSLog(@"result is :%@", self.weakPoint);
//打印
textview[5814:1483779] result is :notStrong

设置为NSString之后,即使被释放了,也能不打印nil。
原因呢可以看一下这篇文章被__weak修饰的NSString
我就直接写结论了(@""、initWithString、stringWithFormat)声明时它是常量字符串,没有retainCount(引用计数),没有强指针指向它,存在内存静态区,不会被销毁,输出自然会有结果。
(initWithFormat)声明不是常量字符串。

相关文章

  • 关键字weak copy

    1.关键字__weak:NSDate * __weak originalDate = self.lastModif...

  • 解读objc源码:weak的实现原理

    一、weak的作用 这里的weak包括属性关键字weak和__weak两种:__weak用于修饰变量(variab...

  • (七)weak 关键字

    前言 weak弱引用,前面提到了,没有深入写,参考iOS深入学习之Weak关键字介绍这篇文章写一点,对于文章的后半...

  • __weak和__strong关键字

    前言 关于__weak和__strong关键字,__weak关键字好理解,用它修饰本类的self,可以防止bloc...

  • ios-收集一些自认为有用的小知识

    什么情况使用 weak 关键字,相比 assign 有什么不同?什么情况使用 weak 关键字? 在 ARC 中,...

  • 招聘一个靠谱的iOS

    一: 什么情况使用 weak 关键字,相比 assign 有什么不同? 1: 什么情况使用 weak 关键字? 在...

  • 面经之《招聘一个靠谱的iOS》

    什么情况使用 weak 关键字,相比 assign 有什么不同? 什么情况使用 weak 关键字? 在 ARC 中...

  • iOS开发weak底层实现原理

    weak关键字 weak是我们开发过程中很常见的关键字,使用场景如下: 声明弱引用属性 使用__weak来创建一个...

  • 2018年iOS面试题runtime

    1、什么情况使用 weak 关键字,相比 assign 有什么不同?什么情况使用 weak 关键字?在 ARC 中...

  • iOS 中weak的实现

    只要学过 iOS 的人,都会对 strong、weak、copy等关键字应该都会很熟悉。weak 属性关键字就是弱...

网友评论

      本文标题:(七)weak 关键字

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